天天看點

Vista UAC下應用程式标注為“需要管理者權限”的四種方法

Vista之家(www.vista123.com):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)

繼續閱讀