2013-12-11 75 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> 
相关问题