我正在研究管理組成某種產品的服務的應用程序。 到目前爲止,已經預見到這個應用程序是從海拔開始的(所以用戶必須確認一個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包含一些「使其工作」的特殊代碼;我也不會購買)。
感謝您的任何答案。
我啓用UAC。我不需要確認運行services.msc的細節。那麼它如何升高?清單不會授予它,它只是指定它需要它。我的清單目前陳述「AsInvoker」 - 我不想跑高架。我接受沒有獲得啓動服務的權利,但是我知道我沒有提升服務,只需啓動services.msc即可。 – user3110963
我沒有專門查看services.msc MMC,但有些應用程序(如taskmgr.exe)將正常運行,然後啓動另一個實例提升。 –
發現這篇文章:http://technet.microsoft.com/en-us/magazine/2009.07.uac.aspx#id0560031 - >所以,是的,你是對的,它是在清單中,指定「自動更新」,其中僅適用於具有特定數字簽名的可執行文件。 – user3110963