2011-07-08 157 views
4

我使用visual studio創建了一個C#Web服務來停止稱爲SMTPSVC的Windows服務「簡單郵件傳輸協議(SMTP)」。嘗試停止C#Windows服務時訪問被拒絕

以下是Web方法來做到這一點:

[WebMethod] 
public string StopService() 
{ 
    String status = ""; 
    try 
    { 
     ServiceController scAlerter = new ServiceController("SMTPSVC"); 

     Console.WriteLine(scAlerter.DisplayName); 
     Console.WriteLine(scAlerter.CanStop); 

     scAlerter.Stop(); 
     Console.WriteLine("Service stopped"); 
     status = "STOPPED"; 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine("Exception caught here" + e.ToString()); 
     status = "Exception" + e.ToString(); 
    } 
    return status; 
} 

我在IIS 5.1服務器發佈此Web服務。當我調用它拋出以下「拒絕訪問」的服務異常

<?xml version="1.0" encoding="utf-8" ?> 
<string xmlns="http://y-square.org/"> 
    ExceptionSystem.InvalidOperationException: Cannot open SMTPSVC service on 
    computer '.'. ---> System.ComponentModel.Win32Exception: Access is denied 
    --- End of inner exception stack trace --- at 
    System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess) 
    at System.ServiceProcess.ServiceController.Stop() at Service.RestartService() 
    in c:\Inetpub\wwwroot\RestartService\App_Code\Service.cs:line 38 
</string> 

默認情況下,該服務使用的用戶帳戶IUSER_system-name進入系統管理員組我已經加入該用戶帳戶,並添加ASPNET用戶帳戶管理員組。

我能夠成功停止/從C#獨立程序啓動此Windows服務。

您能否讓我知道是什麼問題?我需要更改任何權限設置或IIS用戶訪問權限才能運行此權限?

也讓我知道這個C#服務將用於停止Windows服務的用戶帳戶?

非常感謝您的幫助。

由於提前, 瑜珈

回答

5

的IUSER_machinename(IUSER簡稱,以下相同)帳戶,有充分的理由,相對有限的帳戶,很少有超過來賓帳戶更多的權限。不允許啓動和停止Windows服務,甚至不允許詢問它們(以獲取其狀態等)。
當在獨立EXE環境中運行時,上述邏輯成功,因爲底層帳戶[很可能]您可能是管理員組的成員,或者無論如何是相當強大的帳戶。

很容易,但未建議出路這種情況,就是給予IUSER帳戶更多權限。只要嘗試將此帳戶添加到管理員組,即bam !,它將起作用(但也會引入一些潛在的危險安全漏洞)。
A 更好的方法旨在制定將允許通過IIS管理的特定Windows服務的明確列表,並將其各自的服務安全描述符設置爲使IUSER帳戶(或創建的其他帳戶/組根據需要)被允許開始和/或停止它們。
實現這種方法的困難在於,據我所知,沒有GUI或直觀的管理工具來檢查和更改服務的安全描述符:您需要使用sd並「學習」SDDL語言。這裏有幾個指針的回覆這樣做

+0

謝謝, 我曾嘗試加入IUSER帳戶進入系統中使用控制面板/用戶管理員組帳戶應用程序,但我仍然得到同樣的例外。我需要在IIS服務器上進行任何其他配置嗎?像虛擬目錄屬性等 – Yogi

+0

@Yogi。我忙於工作,無法訪問Windows機器來檢查內容。我仍然認爲這是一個問題許可和/或安全策略設置。出於診斷目的,臨時使IIS使用將代碼作爲獨立應用運行以代替IUSER帳戶時使用的帳戶,並查看是否可行。您也可以將此問題指向http://serverfault.com QA站點,因爲系統管理員可以更好地幫助確定似乎是配置問題而不是代碼問題。 – mjv

+0

@mfv:今天開始工作,因爲我的系統重新啓動後,IUSR帳戶添加到管理員組。 非常感謝您的幫助 乾杯, Yogi – Yogi

相關問題