2015-03-02 103 views
0

我用下面的代碼來檢查我的Windows服務的狀態:C#檢查Windows服務狀態

ServiceController sc = new ServiceController("service name", "service location"); 
地把它我的服務駐留在服務器名稱的服務定位嗯

。在我的測試環境中,我有服務和門戶(IIS),我在同一臺服務器上檢查我的服務,但工作正常,但在我的生產環境中,該服務位於與我的門戶網站IIS不同的服務器上。

我的代碼無法檢查狀態。我確定這是一個許可問題,但我嘗試了很多這樣的工作,但沒有用。

我的問題是:什麼「類型的權限」給予什麼「用戶」或「機器名稱」?請幫忙。

回答

0

感謝所有反正我用另一種方式,通過WMI和它的工作:

ConnectionOptions op = new ConnectionOptions(); 
     op.Username = ""; 
     op.Password = ""; 
     ManagementScope scope = new ManagementScope([email protected]"\root\cimv2", op); 
     scope.Connect(); 
     ManagementPath path = new ManagementPath("Win32_Service"); 
     ManagementClass services = new ManagementClass(scope, path, null); 
     foreach (ManagementObject service in services.GetInstances()) 
     { 
      if (service.GetPropertyValue("Name").ToString().ToLower().Equals("serviceName")) 
      { 
       if (service.GetPropertyValue("State").ToString().ToLower().Equals("running")) 
       { 
        //do something 
       } 
       else 
       { 
        //do something 
       } 
      } 
     } 
0

您的IIS門戶是模仿嗎?它似乎確實如此。因此,您正在陷入Kerberos constrained delegation('雙跳')。你不能'修復'這個。您必須要求域管理員爲您的IIS應用程序啓用和配置受限委派。

另一種方法是而不是在您的IIS中模仿。在這種情況下,您需要爲您的門戶應用程序池授予適當的權限。 SC_MANAGER_CONNECT所需的權限。閱讀更多信息,請致電KB179249: Access to the Service Control Manager。顯然,應用程序池必須是域帳戶,並且IIS和目標服務主機應位於同一個域中,或者位於具有信任關係的域中。