WiX MSI和EXE作为一个EXE

时间:2011-06-26 08:44:48

标签: visual-studio-2008 wix

我有一个WiX 3.0 MSI文件,它在安装应用程序的安装结束时运行,因为此应用程序作为自定义操作运行(并使用安装程序传递的会话)一些东西,比如写日志..)。

我需要使用提升的权限运行此安装,因此我创建了一个以管理员身份运行并运行此MSI文件的“bootsrap” - 并将其传递给日志文件。

我正在寻找一种方法将这个MSI和EXE打包成一个EXE来分发。我更喜欢将它作为Visual Studio项目的一部分。可能吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:1)

您可以将其嵌入到自定义操作中,然后将其解压缩并在运行时将其保存到磁盘。

有关详细信息,请参阅文章 Insert any binary file in C# assembly and extract it at runtime

答案 1 :(得分:0)

有许多工具可用于构建自解压可执行文件,Wikipedia lists several of the popular ones。我们最终在WinRAR的后期制作步骤中使用MSBuild来执行此任务。

<Target Name="AfterBuild">
    <GenerateBootstrapper
          ApplicationFile="$(OutputName).msi"
          ApplicationName="$(ProductName)"
          BootstrapperItems="@(BootstrapperFile)"
          OutputPath="$(OutputPath)"
          ComponentsLocation="Relative"
          CopyComponents="true"
          Culture="en"
          Path="$(ProductRoot)\Deployment"/>

    <ConvertToAbsolutePath Paths="$(IconFile)">
        <Output TaskParameter="AbsolutePaths" PropertyName="IconFile"/>
    </ConvertToAbsolutePath>

    <ConvertToAbsolutePath Paths="$(BannerFile)">
        <Output TaskParameter="AbsolutePaths" PropertyName="BannerFile"/>
    </ConvertToAbsolutePath>

    <!--  a      Adds files to archive -->
    <!--  -m     Sets compression level (0-store...3-default...5-maximal) -->
    <!--  -sfx   Sets self-extracting mode -->
    <!--  -ep1   Exclude base directory from included file paths -->
    <!--  -r     Add files recursively -->
    <!--  -iadm  Request administrator rights -->
    <!--  -z     Specify sfx configuration file -->
    <!--  -iicon<icon.ico>  Specify icon to use -->
    <!--  -iimg<banner.bmp>  Specify splash banner to use -->
    <Exec Command='$(ProductRoot)\..\buildTools\WinRAR\winrar.exe a -m3 -sfx -ep1 -r -iadm -iicon$(IconFile) -iimg$(BannerFile) -zsfx_config.txt $(OutputPath)\$(OutputSetupName) $(TargetPath) $(OutputPath)\setup.exe "$(BootstrapperDependency)"'/>
</Target>

在WiX 3.6中,Burn应该能够处理该任务,但我还没有尝试过它。