我需要在我的安装程序项目中包含Microsoft C ++ 2013可再发行组件。 我厌倦了使用Wix文档中的说明: http://wixtoolset.org/documentation/manual/v3/howtos/redistributables_and_install_checks/install_vcredist.html
这是摘自.wxs我在哪里我包括Merge模块包:
<Fragment>
<FeatureGroup Id="CompleteFeatures">
<Feature Id="Complete" Level="1" Title="$(var.PRODUCT)" AllowAdvertise="no" TypicalDefault="install">
<!-- app components here -->
</Feature>
<Feature Id="VCRedist" Title="C++ Redistributable Package for Visual Studio 2013" AllowAdvertise="no" Display="hidden" Level="1" Absent="disallow">
<MergeRef Id="VCRedist"/>
</Feature>
</FeatureGroup>
<DirectoryRef Id="APPLICATIONFOLDER">
<Merge Id="VCRedist" SourceFile="Microsoft_VC120_CRT_x86.msm" DiskId="1" Language="0"/>
</DirectoryRef>
Redistrbutable dll以静默方式安装到system32文件夹中。但是,当使用修复选项时,安装程序会要求关闭Visual Studio等杂项应用程序(这是不可接受的):
http://i.stack.imgur.com/h5Ixd.png
当c ++可再发行组件包未包含在安装程序中时,问题不存在。 在卸载期间,不需要关闭任何应用程序。如何修复修复选项以不需要关闭不相关的应用程序?
答案 0 :(得分:0)
最简单的答案是不包含C ++合并模块,而是使用刻录来引导先决条件。这会创建您正在寻找的分离。根据我的经验,合并模块有太多问题被认为是可用的。我很确定MSFT也会在某些方面承认这一点。
答案 1 :(得分:0)
我最终检查系统目录中是否存在msvcr120.dll并根据该条件安装可再发行组件。
<Property Id="VC2013_REDIST_INSTALLED">
<DirectorySearch Id="CheckFileDir" Path="[SystemFolder]" Depth="1">
<FileSearch Id="CheckFile" Name="msvcr120.dll" />
</DirectorySearch>
</Property>