我正在尝试使用我正在编写的安装程序安装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>
答案 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可再发行组件作为合并模块,这可能是一个很好的起点。