星期五, 2月 13, 2009

讓程式在Vista下 以「系統管理者」身份執行

在Vista下
當程式需要有系統管理者權限時
Vista是通過manifest來判斷所需的權限
也就是 YourProgram.exe 就會看同位置下的 YourProgram.exe.manifest (xml檔)
主要有2個步驟
1.先編這個xml檔
(1)複製「專案/Properties」下的app.manifest
(2)再把裡的name修改成YourProgram.exe
(3)把的level改成requuirAdministrator
*如果沒app.manifest這個檔案,右鍵「專案/屬性」下的分頁「安全性」,把啟用ClickOnce安全性設定取消就會出現了


2.編完後,利用mt.exe 來下
mt -manifest YourProgram.exe.manifest -outputresource:YourProgram.exe

*編完得到失敗結果:
Code:9009 => 找不到mt.exe , 找出mt.exe 再加入
通常會在C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin 底下找到mt.exe
到環境變數裡Path設定吧
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin;
Code:31 => 還不是很確定,就多按幾下 或切個畫面就可以了

Reference中有詳細的圖文說明
就照著步驟做吧
「就感心」的是 筆者有教在「建置後事件命令列」中,放進步驟2
也就是當你的程式compile後,就會自動來執行這段指令。
不然多個步驟 忘了編就麻煩了
*將manifest檔放到bin/Release下

Reference

如何讓你的C#程式在Vista上以「系統管理者身分」執行

2 則留言:

Unknown 提到...

你好 : 我看完了你寫的"讓程式在Vista下 以「系統管理者」身份執行" 我有成功的用出來 不過有個問題想請教你 我這邊有將方案加上了一個新的安裝和部屬的專案,安裝和部屬的檔案來源就是已經修改過權限的執行檔,但是經由安裝和部屬製作出來的msi檔,安裝後會發現執行檔的權限被修改過,不是我們修改後的檔,而是修改之前的樣子,請問這問題該怎們解呢?
多謝解答!!

fishjerky 提到...

我是express版
頂多用ClickOnce做內部的封裝
沒用過"安裝和部屬專案"
對外我都用installshield封裝...
好不容易說服老板買...8萬... XD

重新將執行檔加入專案裡試試
不然重新建一個專案
我就不信還會是舊的...