2017-05-30 89 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

相關問題