为我的 msi 创建“隐形”引导程序

问题描述

我有一个用 WiX 创建的 msi。我不需要创建链包,但我确实需要能够让用户右键单击安装程序并选择“以管理员身份运行”。在 Windows 中使用 MSI 无法做到这一点,只能使用 EXE。

有没有办法创建一个没有自己的 UI 的引导程序 exe 来启动我的 msi?

这就是我认为需要这样做的原因(以防有其他解决方案):

我的 WiX 安装程序使用以下代码安装证书:

<iis:Certificate Id="ClientCert"
                                     Name="MyClientCert"
                                     StoreName="personal"
                                     StoreLocation="localMachine"
                                     Request="no"
                                     Overwrite="yes"
                                     BinaryKey="ClientCertBinary"
                                     PFXPassword="mypassword"/>

当我以管理员身份登录时在某些计算机上运行它时,证书安装正常。但是当我在其他一些计算机上运行它时,同时登录管理员帐户时,安装失败并出现以下错误

InstallCertificates:  Error 0x80090010: Failed to open PFX file.
InstallCertificates:  Error 0x80090010: Failed to get SHA1 hash of certificate.
InstallCertificates:  Error 0x80090010: Failed to resolve certificate: MyClientCert

我在另一篇文章中读到 UAC 有时会在这方面表现不同。该人建议右键单击并选择“以管理员身份运行”。我通过以管理员身份打开命令窗口并运行 msi 来尝试此操作,它的效果非常好。但是,当我们向客户发布 msi 时,不能选择打开命令窗口。因此需要一个 exe 引导程序。

解决方法

这并不是您问题的真正答案,但您可以通过添加以下注册表项来为 MSI 文件右键单击“以管理员身份运行”选项:

  • 在 HKCU hive 中添加没有管理员权限的选项:

      Windows Registry Editor Version 5.00
    
      [HKEY_CURRENT_USER\SOFTWARE\Classes\Msi.Package\shell\RunAs]
      "HasLUAShield"=""
    
      [HKEY_CURRENT_USER\SOFTWARE\Classes\Msi.Package\shell\RunAs\Command]
      @="\"C:\\Windows\\System32\\msiexec.exe\" /i \"%1\" %*"
    
  • 添加具有管理员权限的选项:

      Windows Registry Editor Version 5.00
    
      [HKEY_CLASSES_ROOT\Msi.Package\shell\RunAs]
      "HasLUAShield"=""
    
      [HKEY_CLASSES_ROOT\Msi.Package\shell\RunAs\Command]
      @="\"C:\\Windows\\System32\\msiexec.exe\" /i \"%1\" %*"