Wix - 当C ++可再发行组件作为合并模块包含时,如何防止安装程序在修复模式下关闭不相关的应用程序?

时间:2015-10-13 15:48:22

标签: wix windows-installer

我需要在我的安装程序项目中包含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 ++可再发行组件包未包含在安装程序中时,问题不存在。 在卸载期间,不需要关闭任何应用程序。如何修复修复选项以不需要关闭不相关的应用程序?

2 个答案:

答案 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>