StartService功能开始执行服务。
BOOL StartService(
SC_HANDLE 【hService】, | //处理服务 |
DWORD 【dwNumServiceArgs】, | //参数数量 |
LPCTSTR *【lpServiceArgVectors】 | //参数字符串指针数组的地址 |
); |
参数
【hService】
标识服务。该句柄由OpenService或CreateService功能返回,并且必须具有SERVICE_START访问权限。
【dwNumServiceArgs】
指定【lpServiceArgVectors】数组中的参数字符串数。如果【lpServiceArgVectors】为NULL,则该参数可以为零。
【lpServiceArgVectors】
指向指向传递给服务的以null结尾的参数字符串的指针数组。驱动程序服务不接收这些参数。如果没有参数传递给正在启动的服务,则此参数可以为NULL。该服务通过其ServiceMain功能访问这些参数。请注意,在传递给ServiceMain函数的参数数组中,第一个参数(argv [0])是默认情况下服务的名称,后面是【lpServiceArgVectors】数组中的参数(如果有)。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
错误
服务控制管理器可以设置以下错误代码。其他可以由服务控制管理器调用的注册表功能设置。
值 | 含义 |
ERROR_ACCESS_DENIED | 指定的句柄未被打开,具有SERVICE_START访问权限。 |
ERROR_INVALID_HANDLE | 指定的句柄无效。 |
ERROR_PATH_NOT_FOUND | 找不到服务二进制文件。 |
ERROR_SERVICE_ALREADY_RUNNING | 该服务的一个实例已经在运行。 |
ERROR_SERVICE_DATABASE_LOCKED | 数据库被锁定。 |
ERROR_SERVICE_DEPENDENCY_DELETED | 该服务取决于不存在或已被标记为删除的服务。 |
ERROR_SERVICE_DEPENDENCY_FAIL | 该服务取决于另一个无法启动的服务。 |
ERROR_SERVICE_DISABLED | 该服务已被禁用。 |
ERROR_SERVICE_LOGON_FAILED | 该服务无法登录。 |
ERROR_SERVICE_MARKED_FOR_DELETE | 该服务已被标记为删除。 |
ERROR_SERVICE_NO_THREAD | 无法为Win32服务创建线程。 |
ERROR_SERVICE_REQUEST_TIMEOUT | 该服务没有及时响应启动请求。 |
备注
当驱动程序服务启动时,StartService功能在设备驱动程序完成初始化之前不会返回。
当服务启动时,服务控制管理员产生服务进程,如有必要。如果指定的服务与其他服务共享进程,则所需的进程可能已经存在。StartService功能不等待新服务的第一次状态更新(可能需要一段时间)。相反,当服务控制管理器从服务控制调度程序接收到该服务的ServiceMain线程成功创建的通知时,它返回。
服务控制管理器在从StartService返回之前设置以下默认状态值:
*服务的当前状态设置为SERVICE_START_PENDING。
*接受的控制被设置为无(零)。
* CheckPoint值设置为零。
* WaitHint时间设置为2秒。
呼叫过程可以通过定期调用QueryServiceStatus功能来确定新服务是否完成了初始化,以查询服务的状态。
在初始化期间,服务不能调用StartService.原因是服务控制管理中心在初始化期间锁定服务控制数据库,所以调用StartService将阻止。一旦服务向服务控制管理器报告它已经成功启动,它可以调用StartService.
也可以看看
ControlService, CreateService, OpenService, QueryServiceStatus, ServiceMain