WIX自定义操作以启动高架应用程序

时间:2014-01-21 18:22:15

标签: wix installer uac

这是我编写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>

1 个答案:

答案 0 :(得分:0)

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

知道是否有办法直接从WIX安装程序启动需要提升的应用程序仍然会很好。