2017-05-30 52 views
0

我正在使用以下代码将远程服务器中的服务启动类型更改为手动/自动使用C#。在远程机器中将服务启动类型更改为Delayed(自动)

public static void ChangeServiceStartupType() 
    { 

     string query1 = "select * from Win32_Service where name = 'myservice' "; 


     string server = "servername"; 
     ConnectionOptions connectoptions = new ConnectionOptions(); 

     connectoptions.Username = @"username"; 
     connectoptions.Password = "password"; 

     ManagementScope scope = new ManagementScope(@"\\" + server + @"\root\cimv2"); 
     scope.Options = connectoptions; 
     scope.Connect(); 

     ObjectQuery query = new ObjectQuery(query1); 
     ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(scope, query); 
     ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get(); 
     foreach (ManagementObject mo in managementObjectSearcher.Get()) 
     { 
      string name = mo.Properties["Name"].Value.ToString().Trim().ToLower(); 
      string state = mo.Properties["State"].Value.ToString().Trim(); 
      string startmode = mo.Properties["StartMode"].Value.ToString().Trim(); 
      changemode(mo, "Automatic"); 
     } 
    } 

这里是changemode方法

private static void changemode(ManagementObject mo, string startmode) 
    { 
     ManagementBaseObject inParams = mo.GetMethodParameters("ChangeStartMode"); 
     inParams["startmode"] = startmode; 
     ManagementBaseObject outParams = mo.InvokeMethod("ChangeStartMode", inParams, null); 
     startmode = mo.Properties["StartMode"].Value.ToString().Trim(); 
    } 

当我传递参数手册自动在changemode(对象,STARTMODE参数)服务启动从自动型的变化到手动,反之亦然。但是,我无法将其更改为自动(延迟启动)。

我试图自动延迟延迟 - 自动自动(延时启动)我如何实现这一目标?

回答

0

看着documentation,似乎无法使用ChangeStartMode Win32方法延迟服务启动。

myServiceInstaller.StartType = ServiceStartMode.Automatic; 
myServiceInstaller.DelayedAutoStart = true; 

不过我猜,是不是一种选择,所以我们必须深入挖掘:如果你使用ServiceInstaller,像这样做你想要的东西是相当简单的。

Service类确实有DelayedAutoStart属性,但它是只读的。如果你想把它设置为延迟,你将不得不乱用P/Invokes。我可以找到的所有信息指向ChangeServiceConfig2this结构。

另外,你可以执行这个命令它会有相同的效果。但是,这不是真正的答案,只是一种解决方法。

sc.exe config myService start= delayed-auto 

最后,检查出this(非常)由用户Kramii长的答案,并通过thisPeter Kelly。他们都写了助手类来让这样的事情变得更容易。我没有测试过它们,但看起来很有前途。

+0

感谢@Sty您输入

更多的文档。我想出了一个办法:) –

0

Sty的答案可让您将服务设置为在创建时自动延迟;不是在部署后。

有一个命令行,可以做到这一点

sc \\computername config *servicename* start= delayed-auto 

我跑在使用WMI 管理类远程服务器这个命令行,它工作正常。如何远程启动一个进程here

+1

其实我在我的答案中包含了命令选项。很高兴你能解决这个问题。 – stybl