2013-12-11 187 views
0

您已經創建了一個安裝程序,它在用戶級別安裝應用程序。 當我從cab文件中提取setup.exe並在本地運行時,它不會提示我進行UAC並正常安裝並安裝在用戶上下文中。從Internet Explorer安裝時UAC提示

應用程序和駕駛室已經過數字簽名。

但是,當我安裝相同的使用一個點擊安裝程序它會提示我爲UAC並將其安裝在管理上下文中。

任何可以拋出一些爲什麼相同的setup.exe行爲不同?

我該怎麼做才能避免這種情況?

我想我的應用程序安裝在沒有管理員權限的用戶級別?

回答

0

我的猜測是setup.exe正在觸發UAC setup compatibility heuristic。從MSDN:

User Account Control: Detect application installations and prompt for elevation

當檢測應用程序安裝包需要提升權限,用戶被提示輸入管理員用戶名和密碼。如果用戶輸入有效憑證,則操作將繼續執行適用的權限。

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> 
相關問題