在vs下編程時,經常會用到一些特殊的權限,尤其是管理員權限,下面是在win7下筆者親測通過的。
下面要分兩種情況:
第一種情況就是在vs2003或者以下的編譯器中運行
1、准備一個manifest文件,命名如下:XPStyle.manifest
文件的內容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="5.1.0.9" processorArchitecture="X86" name="XPStyle.manifest" type="win32" /> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>
asInvoker : 如果選這個,應用程序就是以當前的權限運行。
highestAvailable: 這個是以當前用戶可以獲得的最高權限運行。
requireAdministrator: 這個是僅以系統管理員權限運行。
2、然后保存,放到和資源文件(.rc)放到一個目錄下
3、用文件編輯器打開上述資源文件,在最后一行加上
1 24 "XPStyle.manifest"
1是資源id,24是資源的名稱,必須是1和24
4、然后保存重新編譯程序就好了。
這里有個注意事項要說明:就是這樣生成的exe文件不能調試運行,只能雙擊運行,要想用管理員身份的調試,需要讓編譯器以管理員身份運行同時把資源文件中的添加的那行注釋掉就好了。
如果直接點調試運行會造成關不掉你那個程序,用任務管理器也不能關掉。
第二種情況是在vs2005以上的編譯器中運行
打開vs2005、vs2008等工程,在【解決方案資源管理器】里查看是否有app.manifest這個文件,如果沒有的話,通過以下方法創建:
方法1:
1、在【解決方案資源管理器】右鍵工程名稱選擇屬性;
2、在彈出的該對話框中,選擇【安全性】選項卡。
3、勾選【啟用ClickOnce安全設置】,並選中【這是完全可信的應用程序】。
4、保存工程,這時候app.manifest就自動創建了。
打開app.manifest把默認的配置修改一下,通過代碼的注釋,可以知道需要修改的節點是【requestedExecutionLevel】
asInvoker : 如果選這個,應用程序就是以當前的權限運行。
highestAvailable: 這個是以當前用戶可以獲得的最高權限運行。
requireAdministrator: 這個是僅以系統管理員權限運行。
找到<requestedExecutionLevel level="asInvoker" uiAccess="false" />
把其改為<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
這時候修改完成,按下F5進行調試,通常會收到如下的錯誤提示:【ClickOnce 不支持請求執行級別“requireAdministrator”】。
事情好像發生了相互矛盾,上面開啟【ClickOnce】便自動創建了app.manifest,現在修改了app.manifest卻提示:ClickOnce 不支持請求執行級別“requireAdministrator”。
解決方法是:只要把【啟用ClickOnce安全設置】不勾選就可以了。
如果操作步驟正確,按下F5進行調試,會彈出如下的提示框,VS具有提升的權限。
這樣我們編寫的應用程序在運行后,就會首先彈出這樣一個提示框 , 點【Yes】后,程序才可以繼續運行,並且獲得系統管理員的權限。
方法2:
為工程項目添加一個類,應用程序清單文件(app.manifest)。
然后可以看到app.manifest的位置不在Properties屬性里了,變成在引用里了,其節點內容也少了一些。
剩下的方法和上面相同。這樣跳過了【啟用ClickOnce安全設置】這步,直接執行,不會出錯了。