我们最近决定将VC ++可重新分发包与我们的应用程序捆绑在一起。 不幸的是,这打破了我们升级。
旧产品未正确卸载,并与新版本一起出现在“ 添加/删除”控制面板中 。 如果我理解正确的话,当旧安装程序的所有function都没有卸载时,会发生这种情况,这就是为什么我尝试了下面介绍的两种方法。 如果我不捆绑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>
我会做一个详细的日志升级,看看发生了什么事情。 特别是查看适用于升级的FindRelatedProduct事件(将会有几个),看看有没有什么。
这是我的猜测:一些C ++合并模块强制每个系统安装。 如果现有的已安装产品是每个用户,那么升级将不会发生,因为它是跨越上下文的,使您既旧又安装。 当你提到“当旧的安装程序的所有功能都没有卸载”时,我不知道你看到了什么,但是升级是卸载旧的产品,所以没有理由将其中的一部分遗留下来。 更具体地说,查看合并模块的属性表,看它是否有ALLUSERS = 1条目。