有没有办法将一个“myWindowsService”的依赖关系设置为在同一台机器上运行的另一个服务,例如“SqlService”?
问题是,如果您不知道将安装“myWindowsService”的“sql服务”的名称,但我的服务依赖于sql已经在运行..
感谢名单
答案 0 :(得分:0)
编辑: 没有正确阅读问题。
解决方法(不是最优雅的解决方案)是针对具有已知实例名称的已知白名单枚举所有服务。
使用ManagementObject,您可以设置依赖项(但您必须知道服务的名称):
bool SetServiceDependencies(string serviceName, string[] dependencies)
{
try
{
string objPath = string.Format("Win32_Service.Name='{0}'", serviceName);
//Uses lazy initialization
ManagementObject mmo = new ManagementObject(new ManagementPath(objPath));
//Get properties to check if object is valid, if not then it throws a ManagementException
PropertyDataCollection pc = mmo.Properties;
}
catch (ManagementException me)
{ //Handle errors
if (me.ErrorCode == ManagementStatus.NotFound) {
//Service not found
}
return false;
}
try
{
object[] wmiParams = new object[11]; //parameters for Win32_Service mmo object Change-parameters
wmiParams[10] = dependencies;
//Should we remove dependencies, use array containging 1 empty string
if (dependencies == null || dependencies.Length == 0)
{
wmiParams[10] = new string[] { "" };
}
//Change dependencies
string returnStatus = mWmiService.InvokeMethod("Change", wmiParams).ToString();
}
catch (Exception)
{
return false;
}
return true;
}
答案 1 :(得分:0)
如果您正在使用
sc create <service>
语法,您可以为此提供其他服务,这将使您安装的服务依赖于正在启动的服务。
sc create <service> depend= mssqlserver
如果您使用的是ServiceInstaller类,也可以自动完成。该控制器的属性中有一个区域用于定义启动依赖项。
我知道你说你可能不知道其他服务的名称,但更改依赖关系也很简单。