Win7,Vista UAC下應用程序標註爲“需要管理員權限”的四種方法

[轉]Vista UAC下應用程序標註爲“需要管理員權限”的四種方法

在Microsoft 的UACBlog裏對此有過敘述。總結如下:

首先,如果一個程序被識別爲管理員程序時,Vista會在它的圖標上加上一個盾牌標記。因此很容易看出來。

其次,如果UAC有效的話,管理員程序啓動時會彈出執行許可或者管理員密碼輸入對話框。

據此你可以知道你的標註是不是成功。

方法一:文件名裏包含 “Setup”, ”Install” , “Update”字樣,比如 TestSetup.exe 之類的。

這個方法由UAC的本地安全策略“檢測安裝程序”所控制。如果該策略設置爲無效,則無效。默認是有效的。 當然,這種安裝包也可以強行設置爲非管理員權限運行,例如軟媒團隊開發的酷點、閃遊瀏覽器的安裝包就是這種。

方法二:在Exe里加入manifest資源。.Net的程序好像會自動產生一個。比較新的Visual Studio 2005也會自動生成manifest.

對於比較老的Visual Studio 6以前的應用程序,可以手工編輯一個mainfest文件,然後用mt.exe 寫入到exe的資源裏去

(mt.exe在Visual Studio 2005或者platform SDK裏有,Visual Studio 2005 Express版是免費的,可以自由下載)

Manifest文件是xml格式的文本文件。如下面的例子

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity version="1.0.0.0"

processorArchitecture="x86"

name="Company.Department.Exe Name"

type="win32"/>

<description>Description of your application</description>

<!-- Identify the application security requirements. -->

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">

<security>

<requestedPrivileges>

<requestedExecutionLevel

level="requireAdministrator"

uiAccess="false"/>

</requestedPrivileges>

</security>

</trustInfo>

</assembly>

<assemblyIdentity>的name屬性可以任意自取一個名字,推薦的是按名字空間方式命名。

<trustinfo>是Vista新增的部分。注意level被標記爲requireAdministrator.

此外level也可設爲highestAvaliable, asInvoker, asInvoker 是默認的(與父進程同權限),highestAvaliable則是可取得最大權限,基本無用。

將這個manifest文件命名爲Exe名+.manifest, 如test.exe.manifest
然後用mt.exe綁定
Mt.exe –mainfest test.exe.manifest –outputresource:test.exe;1

1是這個manifest資源的ID.可以有多個manifest資源,但是vista默認使用1。其他的要自己編碼來玩。

方法三:用微軟的Application Compatibility Toolkit 4.1裏的Compatibility Administrator製作一個兼容性數據庫文件,擴展名爲.sdb, 然後把這個sdb和應用程序一起分發。

基本步驟是

製作SDB

1. 在Compatibility Administrator 裏新建的sdb下(打開就有),建立new fix(工具欄上的new fix)。對話框出現,輸入名字。

2. 兼容平臺選None (這個Application Compatibility Toolkit 4.1是爲xp服務的,所以沒有XP選項)

3. 然後是需要設置的兼容性,選擇”RunAsAdmin”, 在列表中間的位置。需要滾動一下。

4. 選擇exe文件名,下一步

5. 如果有可能存在同名exe, 選上“FileSize”, “CheckSum”, 以便使這個兼容性設置針對的確實是你的文件。

6. 如果有多個EXE要設,可以重複1-5步驟。

7. 保存sdb文件,保存時輸入的數據庫名字會出現在目標PC的“添加刪除程序”中。

發佈SDB

1. 在安裝目標PC的Vista系統中,以管理員權限啓動cmd(在開始菜單的“命令行提示符”圖標上按右鍵,然後以管理員權限執行)

2. 輸入 “sdbinst 你的sdb文件名” 例如 sdbinst test.sdb . 按回車。Sdbinst是系統自帶的安裝sdb的程序。XP裏就有.

安裝你的應用程序後,就能以管理員方式執行。

方法四:用戶自己動手,或者Vista自動檢測,或者你修改註冊表。

用戶自己動手的方法是在Exe文件的屬性對話框的“兼容性”標籤中,選中“以管理員權限執行此程序”複選框。

此外,如果你的程序CreateProcess反覆失敗的話,有時Vista會冒出個“程序兼容性助手”,自動給你這個程序在註冊表里加一項。

手動修改註冊表其實和上2者一樣。鍵爲
HKEY_CURRENT_USERS/Software/Microsoft/Windows NT/CurrentVersion/AppCompatFlags/Layer 鍵下面的值的名字是程序的全路徑,值數據是“RunAsAdmin”.(兼容性助手寫入的值是ElevateCreateProcess)

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