100分请教高手一个冷僻的系统级问题: 如何设置windows服务的依存关系?

时间:2021-10-30 06:29:20
   问这个问题是因为,我想写一个windows服务程序,但这个服务程序依赖于其它服务程序(比如MSSQLSERVER).

6 个解决方案

#1


CreateService时设置lpDependencies参数

#2


SC_HANDLE CreateService(
SC_HANDLE hSCManager,       // handle to SCM database 
LPCTSTR lpServiceName,      // name of service to start
LPCTSTR lpDisplayName,      // display name
DWORD dwDesiredAccess,      // type of access to service
DWORD dwServiceType,        // type of service
DWORD dwStartType,          // when to start service
DWORD dwErrorControl,       // severity of service failure
LPCTSTR lpBinaryPathName,   // name of binary file
LPCTSTR lpLoadOrderGroup,   // name of load ordering group
LPDWORD lpdwTagId,          // tag identifier
LPCTSTR lpDependencies,     // array of dependency names
LPCTSTR lpServiceStartName, // account name 
LPCTSTR lpPassword          // account password
);

第十一个参数是服务的依存关系,比如说服务的启动想要依存SQL Server的启动,那我们可以把这个参数写成:_T("MSSQLSERVER\0");

#3


lpDependencies

#4


   谢谢2楼的,如何处理多个呢? 

#5


CreateService时lpDependencies参数就是依赖项,两个\0结尾,多个依赖项之间用\0分隔。
也可以通过设置注册表键中DependOnService值的方式来设置。

#6


我日他姥姥的,原来lpDependencies参数要加"\0",我用BCB调用CreateService API,lpDependencies参数传的是"MSSQLSERVER",结果老报:"ERROR_CIRCULAR_DEPENDENCY.A circular service dependency was specified "这个错,上网搜不到例子,所有例子这个参数都是NULL,连微软的例子这个参数也传的是NULL:
    schService = CreateService( 
        schSCManager,              // SCM database 
        SVCNAME,                   // name of service 
        SVCNAME,                   // service name to display 
        SERVICE_ALL_ACCESS,        // desired access 
        SERVICE_WIN32_OWN_PROCESS, // service type 
        SERVICE_DEMAND_START,      // start type 
        SERVICE_ERROR_NORMAL,      // error control type 
        szPath,                    // path to service's binary 
        NULL,                      // no load ordering group 
        NULL,                      // no tag identifier 
        NULL,                      // no dependencies 
        NULL,                      // LocalSystem account 
        NULL);                     // no password 
微软件真TM懒,还得谢谢楼主和回答问题的大侠

#1


CreateService时设置lpDependencies参数

#2


SC_HANDLE CreateService(
SC_HANDLE hSCManager,       // handle to SCM database 
LPCTSTR lpServiceName,      // name of service to start
LPCTSTR lpDisplayName,      // display name
DWORD dwDesiredAccess,      // type of access to service
DWORD dwServiceType,        // type of service
DWORD dwStartType,          // when to start service
DWORD dwErrorControl,       // severity of service failure
LPCTSTR lpBinaryPathName,   // name of binary file
LPCTSTR lpLoadOrderGroup,   // name of load ordering group
LPDWORD lpdwTagId,          // tag identifier
LPCTSTR lpDependencies,     // array of dependency names
LPCTSTR lpServiceStartName, // account name 
LPCTSTR lpPassword          // account password
);

第十一个参数是服务的依存关系,比如说服务的启动想要依存SQL Server的启动,那我们可以把这个参数写成:_T("MSSQLSERVER\0");

#3


lpDependencies

#4


   谢谢2楼的,如何处理多个呢? 

#5


CreateService时lpDependencies参数就是依赖项,两个\0结尾,多个依赖项之间用\0分隔。
也可以通过设置注册表键中DependOnService值的方式来设置。

#6


我日他姥姥的,原来lpDependencies参数要加"\0",我用BCB调用CreateService API,lpDependencies参数传的是"MSSQLSERVER",结果老报:"ERROR_CIRCULAR_DEPENDENCY.A circular service dependency was specified "这个错,上网搜不到例子,所有例子这个参数都是NULL,连微软的例子这个参数也传的是NULL:
    schService = CreateService( 
        schSCManager,              // SCM database 
        SVCNAME,                   // name of service 
        SVCNAME,                   // service name to display 
        SERVICE_ALL_ACCESS,        // desired access 
        SERVICE_WIN32_OWN_PROCESS, // service type 
        SERVICE_DEMAND_START,      // start type 
        SERVICE_ERROR_NORMAL,      // error control type 
        szPath,                    // path to service's binary 
        NULL,                      // no load ordering group 
        NULL,                      // no tag identifier 
        NULL,                      // no dependencies 
        NULL,                      // LocalSystem account 
        NULL);                     // no password 
微软件真TM懒,还得谢谢楼主和回答问题的大侠