編譯完成的工程在WIN7或者VISTA下自動使用管理員權限運行

 
方法1
Vista/Win7使用UAC加強了權限管理,一些程序需要用戶指明管理員權限才能正常運行。那麼如何讓一個程序默認就是以管理員方式運行呢?答案是Manifest.

步驟如下:

1. 在工程中新建一個文件,例如mani.xml。
其內容爲

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
<ms_asmv2:security>
<ms_asmv3:requestedPrivileges xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</ms_asmv3:requestedPrivileges>
</ms_asmv2:security>
</ms_asmv2:trustInfo>
</assembly>

藍色的一行是關鍵的。默認是asInvoker。這裏改成requireAdministrator.
2. 右鍵項目,選擇Properties。在Mainfest Tool一節,選擇Input and Output,在Additional Manifest Files中,輸入剛纔創建的xml文件。
3. Rebuild,這時可能會出現一個警告(81010002),不用理會:(注,爲了得到詳細的信息,我把項目屬性 - Manifest Tool - General 中的Suppress Startup Banner 設置成No, Verbose Output 設置成Yes)
1>------ Rebuild All started: Project: test, Configuration: Release Win32 ------
1>Deleting intermediate and output files for project 'test', configuration 'Release|Win32'
1>Compiling...
1>stdafx.cpp
1>Compiling...
1>test.cpp
1>Linking...
1>Generating code
1>Finished generating code
1>Embedding manifest...
1>Microsoft (R) Manifest Tool version 5.2.3790.2075
1>Copyright (c) Microsoft Corporation 2005.
1>All rights reserved.
1>.\mani.xml : manifest authoring warning 81010002: Unrecognized Element "requestedPrivileges" in namespace "urn:schemas-microsoft-com:asm.v3".

1>Build log was saved at "file://f:\myworks\test\test\Release\BuildLog.htm"
1>test - 0 error(s), 1 warning(s)
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

然後可以看到生成的exe文件的圖標變了,上面多了個小盾牌:


雙擊運行,彈出了UAC的確認框,OK了。

最後關於上面的警告:VC2005帶的Manifest工具mt.exe是5.2.3790.2025版本的,更新成Windows SDK中帶的6.1.7716.0,那個警告就消失了。

 

Kudouman補充:

Visual Studio 2005 中的 MT.EXE 在加載 UAC 的 MANIFEST 有問題, 
會導致了Windows XP SP2的SXS.DLL崩潰和Windows的藍屏。
1。 使用 Microsoft Windows Vista SDK 裏面的mt.exe替換 Visual Studio 2005 RTM 裏面的mt.exe 
2。 使用 Visual Studio 2005 SP1 
不知道哪位安裝了 VS 2005 SP1 或者 VISTA SDK 能夠分享一下 MT.EXE 麼? 謝謝
如果是從Microsoft下載Microsoft Windows Vista SDK,安裝以後在C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin\mt.exe獲得文件。 
如果是 VS 2005 SP1 的話 , 在 C:\Program Files\Microsoft Visual Studio 8\VC\bin\mt.exe

 

方法2


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章