我的猜測是setup.exe
正在觸發UAC setup compatibility heuristic。從MSDN:
當檢測應用程序安裝包需要提升權限,用戶被提示輸入管理員用戶名和密碼。如果用戶輸入有效憑證,則操作將繼續執行適用的權限。
Windows會嘗試檢測已安裝程序(例如那些含有設置,安裝,更新在其文件名),並會嘗試自動提升他們的某些應用。微軟確實這是一個兼容性黑客:
- 大多數用戶都沒有意識到他們應該用鼠標右鍵單擊一個安裝程序,並選擇以管理員身份運行
- 甚至更少的開發人員正確地紀念他們的安裝者requireAdministrator
- 甚至更少開發人員使用MSI,它知道如何/當/如果提升到管理員
您可以通知Windows您應用程序應該以管理員身份運行而不是。您可以通過將asInvoker
選項添加到您的可執行文件的程序集清單中來執行此操作:
<?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="client"
type="win32"
/>
<description>CodeJunkie Widget Installer</description>
<!-- Disable Setup elevation compatibility heuristics since we're named setup.exe -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>