簡體   English   中英

嘗試停止 C# Windows 服務時訪問被拒絕

[英]Access Denied while trying to stop a C# Windows Service

我使用 Visual Studio 創建了一個 C# web 服務,以停止名為 SMTPSVC 的 windows 服務“簡單郵件傳輸協議 (SMTP)”。

以下是 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 服務?

非常感謝您的幫助。

在此先感謝,瑜伽士

IUSER_machinename(以下簡稱 IUSER)帳戶有充分的理由是一個相對有限的帳戶,其權限比來賓帳戶多一點。 不允許啟動和停止 Windows 服務,甚至不能詢問它們(獲取它們的狀態等)。
當在獨立 exe 的上下文中運行時,上述邏輯是成功的,因為基礎帳戶 [可能] 是您,可能是管理員組的成員,或者無論如何是一個相當強大的帳戶。

擺脫這種情況的簡單但不推薦的方法是為 IUSER 帳戶提供更多權限。 只是嘗試將此帳戶添加到管理員組 bam。 它會起作用(但也會引入一些潛在危險的安全漏洞)。
更好的方法是明確列出將允許通過 IIS 管理的特定 Windows 服務,並將其單獨的服務安全描述符設置為 IUSER 帳戶(或為該場合創建的另一個帳戶/組)可以根據需要啟動和/或停止它們。
實施這種方法的困難在於,據我所知,沒有 GUI 或直觀的管理工具來檢查和更改服務的安全描述符:您需要使用 sd 並“學習”SDDL 語言。 這里有一些建議這樣做

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM