【问题标题】:WIX Custom Action to Launch an Elevated AppWIX 自定义操作以启动提升的应用程序
【发布时间】:2014-01-21 18:22:15
【问题描述】:

这是我第一次尝试编写 MSI 安装程序。 WIX 安装程序中有关 UAC 的自定义命令在这里和其他地方有很多帖子。但是,还没有找到任何可以解决我的问题的方法。

我需要启动在我的 MSI 中提升的应用程序。我正在尝试启动将安装设备驱动程序的 .NET 应用程序(编译为以管理员身份运行)。如果需要,我使用 .NET exe 向用户显示“连接设备”提示,然后在非托管代码中执行实际的驱动程序安装。

MSI 立即导致 UAC 提示,但应用程序随后在没有提升的情况下启动,并且失败。从提升的命令提示符运行没有帮助。我在某处读到,将清单添加到安装中可能会有所帮助......它没有。

这是我的 WIX 代码:

<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
   <Product Id="*" UpgradeCode="12345678-1234-1234-1234-111111111111" 
            Name="FlashBoot Driver" Version="0.0.1" Manufacturer="ACME Corp" Language="1033">
      <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package"/>
      <Media Id="1" Cabinet="product.cab" EmbedCab="yes"/>

      <Directory Id="TARGETDIR" Name="SourceDir">
         <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLDIR" Name="FlashBoot Driver">
               <Component Id="AppFiles" Guid="12345678-1234-1234-1234-222222222222">
                  <File Id="AppFile1" Source="C:\App\Release\Setup.exe"/>
                  <File Id="AppFile2" Source="C:\App\Release\Setup.exe.manifest"/>
                  <File Id="AppFile3" Source="C:\App\Release\Unmanaged.dll"/>
               </Component>
            </Directory>
         </Directory>
      </Directory>

      <Feature Id="DefaultFeature" Level="1">
         <ComponentRef Id="AppFiles"/>
      </Feature>

      <CustomAction Id="OurAction" 
                    Execute="deferred" 
                    Impersonate="no" 
                    Return="ignore" 
                    FileKey="AppFile1" 
                    ExeCommand="" />

      <InstallExecuteSequence>
         <Custom Action="OurAction" Before="InstallFinalize" />
      </InstallExecuteSequence>

   </Product>
</Wix>

【问题讨论】:

    标签: wix installation uac


    【解决方案1】:

    我通过让 WIX 安装程序启动一个卫星应用程序解决了这个问题,该卫星应用程序又启动了驱动程序安装程序。新应用程序不需要提升,而驱动程序安装程序确实需要提升。另一个好处是新应用可以确定是否需要运行 32 位或 64 位版本的驱动程序安装程序。

    如果有办法直接从 WIX 安装程序启动需要提升的应用程序,仍然会很高兴。

    【讨论】:

    • 您需要将自定义操作配置为延迟运行而无需模拟,这将使其在 LocalSystem 帐户下以管理员权限运行。此外,自定义操作必须在 InstallFiles 标准操作之后进行排序,以确保在您尝试安装/使用它们时所有资源都在计算机上。此方法适用于任何 MSI 包中的自定义操作,无论用于构建它的工具是什么。
    • @Bogdon Mitrache,感谢您的回复。我以为我在按照你的建议做。如您所见,执行被推迟并且模拟被关闭。至于在InstallFiles之后排序,“在InstallFinalize之前”不是完成同样的事情吗?
    • 嗯,抱歉,我一定错过了您的 sn-p,确实您的自定义操作已正确配置和安排。安装日志说什么?另外,如果您使用 Process Explorer 查看自定义操作 EXE 的进程,它是在哪个帐户下启动的?也许你的 EXE 需要在当前的管理员用户下运行,所以即使它在具有管理员权限的系统帐户下运行它也会失败。
    • 你是对的,EXE是在系统账户下运行的。我仍然不明白为什么如果它作为 System.我的 EXE 包含一个具有“requireAdministrator”权限的清单。
    • 好吧,如果它在系统帐户下运行,它会被提升,这就是为什么看不到任何 UAC 提示。我认为问题在于 EXE 并非设计为在系统帐户下运行,也许它需要直接在当前管理员用户下运行?我认为您将需要附加和调试您的自定义操作。
    猜你喜欢
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多