StartService

【勇芳软件工作室】汉化HomePreviousNext

StartService功能开始执行服务。

BOOL StartService(

SC_HANDLE 【hService】,//处理服务
DWORD 【dwNumServiceArgs】,//参数数量
LPCTSTR *【lpServiceArgVectors】//参数字符串指针数组的地址
); 

参数

【hService】

标识服务。该句柄由OpenServiceCreateService功能返回,并且必须具有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