我有一个WiX 3.0 MSI文件,它在安装应用程序的安装结束时运行,因为此应用程序作为自定义操作运行(并使用安装程序传递的会话)一些东西,比如写日志..)。
我需要使用提升的权限运行此安装,因此我创建了一个以管理员身份运行并运行此MSI文件的“bootsrap” - 并将其传递给日志文件。
我正在寻找一种方法将这个MSI和EXE打包成一个EXE来分发。我更喜欢将它作为Visual Studio项目的一部分。可能吗?如果是这样,怎么样?
答案 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应该能够处理该任务,但我还没有尝试过它。