![](/img/trans.png)
[英]C# Windows Service Access denied when trying to write in a folder
[英]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.