我们最近决定将VC ++可再发行组件包与我们的应用程序捆绑在一起。不幸的是,这打破了我们的升级。
旧产品未正确卸载,并且仍与新版本一起出现在添加/删除控制面板中。如果我理解正确,当没有卸载旧安装程序的所有功能时会发生这种情况,这就是我尝试下面描述的两种方法的原因。如果我不捆绑VC可再发行组件,则旧产品不会再出现在控制面板中。
这种行为可能是什么原因,我该如何解决?
<MajorUpgrade
DowngradeErrorMessage="There is already a version of [ProductName] installed."
Schedule="afterInstallExecute"
/>
<!-- include the Visual C++ Redistributable -->
<DirectoryRef Id="TARGETDIR">
<?define MergeModulDir= "C:\Program Files (x86)\Common Files\Merge Modules" ?>
<Merge Id="VCRedist86" SourceFile="$(var.MergeModulDir)/Microsoft_VC140_CRT_x86.msm"
DiskId="1" Language="0" />
</DirectoryRef>
<Feature Id="VCRedist" Title="Visual C++ 14.0 Runtime" AllowAdvertise="no"
Display="hidden" Level="1">
<MergeRef Id="VCRedist86" />
</Feature>
<Feature Id="App" Title="Main Application" Level="1">
<ComponentGroupRef Id="App" />
<ComponentRef Id="ApplicationShortcut" />
<ComponentRef Id="CleanRegistry" />
<ComponentGroupRef Id="SendToShortcuts" />
</Feature>
<Feature Id="App" Title="Main Application" Level="1">
<ComponentGroupRef Id="App" />
<ComponentRef Id="ApplicationShortcut" />
<ComponentRef Id="CleanRegistry" />
<ComponentGroupRef Id="SendToShortcuts" />
<MergeRef Id="VCRedist86" />
</Feature>
答案 0 :(得分:2)
我会使用详细日志进行升级,看看发生了什么。特别要查看适用于您的升级的FindRelatedProduct事件(有几个)并查看是否有任何内容。
这是我的猜测:一些C ++合并模块强制每个系统安装。如果现有已安装的产品是按用户进行的,那么升级将不会发生,因为它是跨上下文的,因此既旧又已安装。我不知道你提到的“当没有安装旧安装程序的所有功能时”,但是升级是对旧产品的卸载,所以没有理由将其中的一部分留下来。更具体地说,查看合并模块的Property表以查看它是否具有ALLUSERS = 1条目。