2012-07-20 40 views
7

我正在構建一個允許將應用程序安裝到我們的模擬器中的工具,它被稱爲'cl-install.exe'。它確實不需要任何管理員權限來運行。但是Windows 7總是彈出一個對話框,要求用戶在命令提示符調用此命令時提供管理員權限。爲什麼Windows要求用系統管理員權限運行名爲「install」的可執行文件?

如果我將同一個可執行文件重命名爲某個其他名稱,但沒有「安裝」或「設置」字樣,則Windows不會要求管理員權限。

有沒有什麼辦法可以防止Windows這樣做,而無需重命名我的可執行文件?

+0

一種可能的解決方法,取決於上下文:http://stackoverflow.com/a/7538190/886887 – 2012-07-20 22:48:37

回答

11

這是Windows Vista和更高版本中存在的啓發式技術的一部分。如果文件中包含「安裝」,「設置」或「更新」等字樣,則從here開始 - 假定安裝程序。

您可以通過添加防止這種情況下,以您的清單

<requestedExecutionLevel level="asInvoker" /> 
+2

我喜歡這個網站。我每天都會學習10件新東西。感謝您的回答。 – GrayFox374 2012-07-20 05:49:33

+0

我在與我的可執行文件相同的目錄中創建了一個名爲'cl-install.exe.manifest'的文件,並添加了您提供的行。當現在運行該文件時,我得到如下所示:「應用程序啓動失敗,因爲它的並排配置不正確......」。我的可執行文件不是安裝程序。這是一個使用MinGW GCC構建的簡單定製工具。 – arunkd13 2012-07-20 11:48:50

+0

您需要將清單正確地嵌入到可執行文件中。希望對stackoverflow的搜索將幫助你解決如何在MinGW中做到這一點,如果沒有,請提出一個新問題。 – 2012-07-20 22:50:56

2

如果我沒記錯的話,你可以禁用這個行爲通過以下方式(從Technet引用):

  1. 點擊開始,點擊所有程序,點擊配件,點擊運行,輸入secpol.msc中的打開文本框,然後單擊確定

  2. 本地安全設置控制檯樹中,單擊本地策略,然後單擊安全選項

  3. 向下滾動並雙擊用戶帳戶控制:檢測應用程序安裝並提示擡高

  4. 選擇禁用選項,然後單擊確定

  5. 關閉本地安全設置窗口。

您可能需要重新登錄才能使設置生效。

2

我發現在這裏工作的解決方案: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選取新的清單文件。

相關問題