2011-10-25 57 views
1

我需要能夠通過可以從第三方軟件調用的exe關閉服務,所以我想我會用C#來快速解決問題。停止在C#中的服務沒有權限提升

我想使用下面的代碼,我發現在線停止服務,但它不會工作,除非我以管理員身份運行該exe文件(理想情況下,我不想要做,因爲我試圖把它作爲光滑)

public static void StopService(string serviceName, int timeoutMilliseconds) 
    { 
     ServiceController service = new ServiceController(serviceName); 
     service.MachineName = "."; 
     try 
     { 
      TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); 

      service.Stop(); 
      service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); 
     } 
     catch 
     { 
      // ... 
     } 
    } 

是否有繞過需要仰角的方法?

+1

我不認爲你可以停止Windows服務,除非服務在同一個帳戶下運行。 –

+3

難道這不能擊敗特權和訪問權限的目的嗎?什麼病毒不會*利用這個技巧? –

+0

除了通過黑客攻擊系統/利用一些bug ... =>不! – Yahia

回答

2

想想這樣:如果圍繞它有什麼方法,整個安全事物會是什麼?

所以,沒有。除非服務在同一個帳戶下運行,否則不應該允許您停止它。

如果我是病毒,我會做的第一件事情是什麼?使用「需要提升的方式」停止病毒掃描服務。

1

您可以安裝您自己的'Stopper-Service',與專用的.exe文件或任何知道如何與該服務通信(例如,通過命名管道)的應用程序通信。

因此,你的所有應用程序/ .exe所做的就是發信號通知此服務,它必須停止/重啓等特定服務。

如果您只想停止自己的服務,則可以考慮集成此類消息傳遞功能,以便您可以在不具有管理員權限的情況下對其進行控制。

當然,你必須實施足夠的安全機制,以確保只有授權的應用程序才能獲得控制權。

希望這會有所幫助。

4

單個服務上有訪問控制列表。您可以授予特定用戶或組權限以關閉/加載特定服務。您可以使用cmd行工具「subinacl」來設置Microsoft的acl:http://www.microsoft.com/download/en/details.aspx?id=23510 請注意,您可以授予關閉服務的權限,而不授予查詢服務配置的權限。