2013-12-17 37 views
0

我正在研究管理組成某種產品的服務的應用程序。 到目前爲止,已經預見到這個應用程序是從海拔開始的(所以用戶必須確認一個UAC提示)。 看起來,對於大多數操作,海拔是不需要的,如開始停止服務。使用ServiceController控制服務與使用services.msc並啓用UAC

該應用程序通常由本地管理員組的成員運行;這些人可以啓動services.msc,然後他們可以啓動和停止服務。所以我預計它會「正常工作」:

ServiceController sc = new ServiceController(Environment.MachineName, "MyServiceApp"); 
sc.Start(); 

它會因「拒絕訪問」異常而失敗。 所以我添加

ServiceControllerPermission scp = 
    new ServiceControllerPermission(ServiceControllerPermissionAccess.Control, Environment.MachineName, "MyServiceApp"); 
scp.Demand(); 
ServiceController sc = new ServiceController(Environment.MachineName, "MyServiceApp"); 
sc.Start(); 

的需求成功,開始還是失敗。

我在StackExchange上關於ServiceController和安全性的問題閱讀了很多問題(和答案);很多答案都表明需要提升高度。由於我(我是本地管理員組的成員)可以啓動並停止使用services.msc,只是不要購買它。

那麼,怎麼了services.msc - 怎麼了我的代碼?我確實啓用了UAC,我不想禁用它。 要啓動或停止服務,不需要提升,對吧?否則,services.msc也需要提升? (我的一位同事建議services.msc包含一些「使其工作」的特殊代碼;我也不會購買)。

感謝您的任何答案。

回答

0

Services.msc(mmc.exe)不一定以提升/管理權限運行。

您可以製作一些「特殊代碼」,讓Windows以升高的方式運行程序運行。您將使用manifest文件。

How do I force my .NET application to run as administrator? https://stackoverflow.com/a/4084620/787893

+0

我啓用UAC。我不需要確認運行services.msc的細節。那麼它如何升高?清單不會授予它,它只是指定它需要它。我的清單目前陳述「AsInvoker」 - 我不想跑高架。我接受沒有獲得啓動服務的權利,但是我知道我沒有提升服務,只需啓動services.msc即可。 – user3110963

+0

我沒有專門查看services.msc MMC,但有些應用程序(如taskmgr.exe)將正常運行,然後啓動另一個實例提升。 –

+1

發現這篇文章:http://technet.microsoft.com/en-us/magazine/2009.07.uac.aspx#id0560031 - >所以,是的,你是對的,它是在清單中,指定「自動更新」,其中僅適用於具有特定數字簽名的可執行文件。 – user3110963

0

我建議您嘗試WMI來啓動和停止服務,對有關WMI方法的詳細信息和.Net檢查這個項目在CodePlex上:

==>Services+

相關問題