CreateService( 二 )

lpServiceStartName参数指定的用户名不存在 。ERROR_SERVICE_EXISTS已存在完全相同的服务 。 注意事项CreateService函式创建一个服务对象并将其安装在SCM资料库中,同时在注册表以下位置中创建同名键值:[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services]由CreateService、ChangeServiceConfig和ChangeServiceConfig2等函式创建服务时提供的服务相关信息就存放于这个键值中 。以下是一些键值的描述:值描述DependOnGroup由lpDependencies参数指定的依赖性服务群组,包含载入顺序 。DependOnService由lpDependencies参数指定的依赖性服务 。Description由ChangeServiceConfig2函式写入的描述信息 。DisplayName由lpDisplayName参数指定的服务显示名称 。ErrorControl由dwErrorControl参数指定的纠错方案 。FailureActions由ChangeServiceConfig2函式写入的异常信息 。Group由lpLoadOrderGroup参数指定的服务群组,包含载入顺序 。ImagePath由lpBinaryPathName参数指定的服务程式档案位置 。ObjectName由lpServiceStartName参数指定的名称 。Start由dwStartType参数指定的服务启动时间 。Tag由lpdwTagId参数指定的识别信息 。Type由dwServiceType参数指定的服务类型 。服务安装程式可以创建子键来提供更多额外的信息 。CreateService函式返回的句柄只能由调用它的进程使用,可以调用CloseServiceHandle函式来关掉这个句柄 。若创建进程共享服务,请不要随意调用可能影响其他进程的函式,如ExitProcess 。另外,请不要卸载服务程式的动态程式库(DLL档案) 。示例搜寻“如何安装服务程式”以查询一个示例 。本页最下方包含一个Delphi示例 。使用要求<th>Minimum supported client </th> <th>Minimum supported server </th> <th>Header </th> <th>Library </th> <th>DLL </th> <th>Unicode and ANSI names </th>Windows 2000 ProfessionalWindows 2000 ServerWinsvc.h (include Windows.h)Advapi32.libAdvapi32.dllCreateServiceW(Unicode) andCreateServiceA(ANSI) 其中dwStartType取值类型如下:共有五种启动类型 。前三种类型是:SERVICE_AUTO_START、SERVICE_DISABLED 和 SERVICE_DEMAND_START 。对应的标準启动类型:自动、禁用和手动,通常使用“计算机管理”管理工具中的“服务”进行配置 。后两种类型是:SERVICE_BOOT_START 和 SERVICE_SYSTEM_START,通常用于配置载入设备驱动程式的方式 。例如,在启动计算机时或启动 Windows 2000 时载入 。Delphi sample:Procedure InstallSelfToSvr();varhscm,hsvr:THandle;PCPathName:PAnsiChar;begintryhscm := OpenSCManager(nil,nil,SM_MANAGER_ALL_ACCESS);if hscm = 0 then exit;PCPathName := pchar(paramstr(0));hsvr := CreateService(hscm,'MyService','MyService Display Name',SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,PCPathName,nil,nil,nil,nil,nil);CloseServiceHandle(hsvr);CloseServiceHandle(hscm);exceptend;end;