【问题标题】:WiX installer should always run as administratorWiX 安装程序应始终以管理员身份运行
【发布时间】:2011-09-01 14:40:46
【问题描述】:

我使用 WiX 为 .NET WPF 应用程序开发了一个自定义安装程序。如果我右键单击并以管理员身份运行,它可以正常工作,但是在没有运行时,由于权限不足,某些组件无法安装。

这些组件包括 SQL Server Express 2008 R2、FoxIt Reader、一个 ActiveX 组件和其他一些组件。它还要求在新安装的数据库上运行一些 SQL 脚本——无论如何,它们都需要管理员权限。


我尝试将 InstallScope="perMachine" 和 InstallPrivileges="elevated" 属性添加到 Package 节点,但这似乎没有什么不同。

我确定这很愚蠢,但我在参考资料或网上找不到任何东西。

【问题讨论】:

    标签: .net wpf installation wix


    【解决方案1】:

    我想如果你只是添加

    <Property Id="MSIUSEREALADMINDETECTION" Value="1" />
    

    它应该可以解决问题。如果没有,请告诉我,我可以做更多检查。

    【讨论】:

    • 谢谢 - 我会摆弄它。我应该把这个放在哪里?
    • 它位于 Product 元素下的任何位置。我喜欢将我所有的属性都放在底部,但这只是个人喜好。
    • 谢谢...这帮助我解决了同样的问题。
    • 对我不起作用。我只需要按用户安装范围,并且需要提升的安装程序,因为某些文件被复制到系统机器范围文件夹中。我可以为此使用命令运行,但我需要它在启动时提示 uac 对话框
    • 感谢您的回答,您知道为什么需要这样做吗?
    【解决方案2】:

    对我来说,我应该运行注册表命令以通过 CustomAction WiX 元素删除系统环境变量,这需要管理员权限。

    使用 CustomAction → Impersonate="no" 为我工作,如帖子 https://stackoverflow.com/a/8657472/3205679 中所述。

    WiX 自定义操作代码:

    <CustomAction Id = "Uninstall_MYSYSENV"
                  Directory  = "INSTALLFOLDER"
                  ExeCommand = 'cmd.exe /c &quot;reg delete       "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session    Manager\Environment" /v MYSYSENV /f&quot;'
                  Execute    = "deferred"
                  Impersonate= "no"
                  Return     = "asyncNoWait"
                  />
    
    <InstallExecuteSequence>
          <Custom Action="Uninstall_MYSYSENV"
                  After="InstallInitialize">Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
    </InstallExecuteSequence>
    

    【讨论】:

      【解决方案3】:

      将此添加到您的包元素中

      <Property Id="ALLUSERS" Value="1" />    <!--equals to install="permachine" at package element but this element depricated -->
      <Property Id="MSIUSEREALADMINDETECTION" Value="1" /> 
      
      <Condition Message="Please Run as Administrator.">
            Privileged
      </Condition>
      

      然后使用 Winrar 和以下选项为 msi 文件创建一个简单的 sfx 存档文件

      • 设置选项卡> 执行后运行输入:你的 msi 文件名

      • 高级选项卡>标记请求管理访问权限选项复选框

      【讨论】:

      • 不需要 sfx 等。只是属性和条件对我有用。
      猜你喜欢
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 2012-03-13
      • 1970-01-01
      • 2017-05-27
      • 2013-03-01
      相关资源
      最近更新 更多