我正在構建一個允許將應用程序安裝到我們的模擬器中的工具,它被稱爲'cl-install.exe'。它確實不需要任何管理員權限來運行。但是Windows 7總是彈出一個對話框,要求用戶在命令提示符調用此命令時提供管理員權限。爲什麼Windows要求用系統管理員權限運行名爲「install」的可執行文件?
如果我將同一個可執行文件重命名爲某個其他名稱,但沒有「安裝」或「設置」字樣,則Windows不會要求管理員權限。
有沒有什麼辦法可以防止Windows這樣做,而無需重命名我的可執行文件?
我正在構建一個允許將應用程序安裝到我們的模擬器中的工具,它被稱爲'cl-install.exe'。它確實不需要任何管理員權限來運行。但是Windows 7總是彈出一個對話框,要求用戶在命令提示符調用此命令時提供管理員權限。爲什麼Windows要求用系統管理員權限運行名爲「install」的可執行文件?
如果我將同一個可執行文件重命名爲某個其他名稱,但沒有「安裝」或「設置」字樣,則Windows不會要求管理員權限。
有沒有什麼辦法可以防止Windows這樣做,而無需重命名我的可執行文件?
這是Windows Vista和更高版本中存在的啓發式技術的一部分。如果文件中包含「安裝」,「設置」或「更新」等字樣,則從here開始 - 假定安裝程序。
您可以通過添加防止這種情況下,以您的清單
<requestedExecutionLevel level="asInvoker" />
我喜歡這個網站。我每天都會學習10件新東西。感謝您的回答。 – GrayFox374 2012-07-20 05:49:33
我在與我的可執行文件相同的目錄中創建了一個名爲'cl-install.exe.manifest'的文件,並添加了您提供的行。當現在運行該文件時,我得到如下所示:「應用程序啓動失敗,因爲它的並排配置不正確......」。我的可執行文件不是安裝程序。這是一個使用MinGW GCC構建的簡單定製工具。 – arunkd13 2012-07-20 11:48:50
您需要將清單正確地嵌入到可執行文件中。希望對stackoverflow的搜索將幫助你解決如何在MinGW中做到這一點,如果沒有,請提出一個新問題。 – 2012-07-20 22:50:56
如果我沒記錯的話,你可以禁用這個行爲通過以下方式(從Technet引用):
點擊開始,點擊所有程序,點擊配件,點擊運行,輸入secpol.msc中的打開文本框,然後單擊確定。
從本地安全設置控制檯樹中,單擊本地策略,然後單擊安全選項。
向下滾動並雙擊用戶帳戶控制:檢測應用程序安裝並提示擡高。
選擇禁用選項,然後單擊確定。
關閉本地安全設置窗口。
您可能需要重新登錄才能使設置生效。
我發現在這裏工作的解決方案:https://github.com/bmatzelle/gow/issues/156
報價:
解決的辦法是寫的可執行下面列出一個清單文件,爲了說服UAC,它不需要管理權限。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<!-- Make sure that UAC believes
that it does not require administrative privilege -->
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
清單文件的文件名應該install.exe.manifest和patch.exe.manifest,然後把它們放在同一文件夾中的install.exe和patch.exe。
如果UAC提示仍然彈出,請更改install.exe和patch.exe的時間戳以說服Windows選取新的清單文件。
一種可能的解決方法,取決於上下文:http://stackoverflow.com/a/7538190/886887 – 2012-07-20 22:48:37