WiX MSI 和 EXE 作为一个 EXE

Posted

技术标签:

【中文标题】WiX MSI 和 EXE 作为一个 EXE【英文标题】:WiX MSI and EXE as one EXE 【发布时间】:2011-06-26 08:44:47 【问题描述】:

我有一个WiX 3.0 MSI 文件,它在安装它所安装的应用程序的最后运行,因为该应用程序作为自定义操作运行(并使用安装程序传递的会话来处理某些内容,例如写日志..)。

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

我正在寻找一种方法来将此 MSI 和 EXE 打包到一个 EXE 中以进行分发。我更喜欢将其作为我的 Visual Studio 项目的一部分。是否可以?如果有,怎么做?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

<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 应该能够处理该任务,但我还没有尝试过。

【讨论】:

以上是关于WiX MSI 和 EXE 作为一个 EXE的主要内容,如果未能解决你的问题,请参考以下文章

使用管理员权限在 Wix msi 中运行 .exe

一旦通过Wix安装到程序文件文件夹,C#exe就无法正常工作

Wix - 如何从安装目录安装后运行exe文件?

WiX:如何打包 exe 或 dll 以仅在安装期间使用

尝试从 WIX msi 运行嵌入式工具以进行选择性安装

如何使用 WiX 和 MSI 进行静默安装和卸载?