使用WiX安装带有自定义操作的预构建可执行文件

时间:2013-01-17 14:02:00

标签: wix

我正在尝试使用我正在编写的安装程序安装Visual C ++ 2012软件包,因此最终用户不必单独执行此操作。

可执行文件位于安装目录中,但是当我构建安装程序时,出现错误,指出系统无法找到该文件。

以下是与我的安装程序部分有关的代码块。如果有多个错误,请提前抱歉。我刚刚开始用WiX弄湿了。

<Binary Id="MyVC" SourceFile="[INSTALLDIR]vcredist_x64.exe"/>
<CustomAction   Id='VCInstall'
                BinaryKey="MyVC"
                ExeCommand='/quiet'
                Execute='deferred' 
                Return='ignore'/>

<InstallExecuteSequence>
    <Custom Action="VCInstall" Before="InstallFinalize" ></Custom>
</InstallExecuteSequence>

2 个答案:

答案 0 :(得分:1)

如果您不想使用引导程序,最好的方法是通过合并模块。为了使您能够执行所需操作,您必须使用自定义操作从二进制文件中提取数据,并将其写入目标计算机上某个位置的新文件,然后运行安装程序 - 这不遵循MSI最佳实践。但是如果你想沿着这条路走下去,我可以帮到你。这是我将它们添加到我的项目中的方式,它们是在InstallExecuteSequence

期间安装的
    <!-- Including the 64-bit redistributables if the platform is 64-bit -->
<?if $(var.Platform) = x64 ?>
<DirectoryRef Id="TARGETDIR">
  <Merge Id="Microsoft_VC110_CRT_x64" SourceFile="C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC110_CRT_x64.msm" Language="0" DiskId="1"/>
  <Merge Id="Microsoft_VC110_ATL_x64" SourceFile="C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC110_ATL_x64.msm" Language="0" DiskId="1"/>
  <Merge Id="Microsoft_VC110_MFC_x64" SourceFile="C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC110_MFC_x64.msm" Language="0" DiskId="1"/>
  <Merge Id="Microsoft_VC110_MFCLOC_x64" SourceFile="C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC110_MFCLOC_x64.msm" Language="0" DiskId="1"/>
</DirectoryRef>

<Feature Id="VCRedistx64" Display="hidden" Level="1">
  <MergeRef Id="Microsoft_VC110_CRT_x64"/>
  <MergeRef Id="Microsoft_VC110_ATL_x64"/>
  <MergeRef Id="Microsoft_VC110_MFC_x64"/>
  <MergeRef Id="Microsoft_VC110_MFCLOC_x64"/>
</Feature>
<?endif ?>

<!--Installing 32-bit Visual C++ 2012 Redistributables-->
<?if $(var.Platform) = x86 ?>
<DirectoryRef Id="TARGETDIR">
  <Merge Id="Microsoft_VC110_CRT_x86" SourceFile="C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC110_CRT_x86.msm" Language="0" DiskId="1"/>
  <Merge Id="Microsoft_VC110_ATL_x86" SourceFile="C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC110_ATL_x86.msm" Language="0" DiskId="1"/>
  <Merge Id="Microsoft_VC110_MFC_x86" SourceFile="C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC110_MFC_x86.msm" Language="0" DiskId="1"/>
  <Merge Id="Microsoft_VC110_MFCLOC_x86" SourceFile="C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC110_MFCLOC_x86.msm" Language="0" DiskId="1"/>
</DirectoryRef>

<Feature Id="VCRedist" Display="hidden" Level="1">
  <MergeRef Id="Microsoft_VC110_CRT_x86"/>
  <MergeRef Id="Microsoft_VC110_ATL_x86"/>
  <MergeRef Id="Microsoft_VC110_MFC_x86"/>
  <MergeRef Id="Microsoft_VC110_MFCLOC_x86"/>
</Feature>
<?endif ?>

答案 1 :(得分:0)

以下是Qt5应用程序的完整example installer,其中包含VC可再发行组件作为合并模块,这可能是一个很好的起点。