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的主要内容,如果未能解决你的问题,请参考以下文章