2016-06-22 59 views
0

我正在嘗試查看字符串數組中多個服務的狀態。如何查看陣列中特定服務的狀態

該服務可能不總是在我將用它因此try

代碼的機器存在:

public string[] service = { "MSSQL$AMTECHFASTTEST", "SQLBrowser" }; 
    public void stopService() 
    { 
     int i = 0; 
     ServiceController[] scServices; 
     scServices = ServiceController.GetServices(service[i]); 

     try 
     { 
       foreach (ServiceController services in scServices) 
       { 
        MessageBox.Show(service[i]+" " + services.Status.ToString(), "Service Status"); 
        i++; 
       } 
     } 

     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString(), "Error"); 
     } 
    } 

我認爲這是ServiceController.GetServices(service[i])線,導致該錯誤,但我不能解決它。

感謝,

+0

在你的代碼中,'i'是'-1',因此如果用作數組索引,則不包含range_。 –

+0

謝謝勒內,但是這仍然不能解決我的問題。 - 我剛剛編輯它到我的代碼。 – SCramphorn

+0

你沒有告訴我們你的問題是什麼。 –

回答

2

ServiceController.GetServices(string machineName)方法檢索在主機machineName運行的服務。

如果您希望獲得相同機器上運行的服務作爲您的程序,請使用不帶參數的ServiceController.GetServices()

所以我認爲你想做的事是這樣的:

public string[] wantedServices = { "MSSQL$AMTECHFASTTEST", "SQLBrowser" }; 
public void stopService() 
{ 
    ServiceController[] services = ServiceController.GetServices() 
             .Where(svc => wantedServices.Contains(svc.ServiceName)) 
             .ToArray(); 

    try 
    { 
     foreach (ServiceController svc in services) 
     { 
      MessageBox.Show($"{svc.ServiceName} {svc.Status}", "Service Status");      
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString(), "Error"); 
    } 
} 

這得到所有具有包含在你的wantedServices陣列名稱在當前機器上的服務(我改變了一些變量名稱爲清楚起見) 。

+0

謝謝Rene,perfecto! – SCramphorn