首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >捆绑VC再发行后Wix <MajorUpgrade>无法工作

捆绑VC再发行后Wix <MajorUpgrade>无法工作
EN

Stack Overflow用户
提问于 2017-08-07 08:16:36
回答 1查看 91关注 0票数 1

我们最近决定将VC++可再发行包与我们的应用程序捆绑在一起。不幸的是,这破坏了我们的升级。

旧产品没有正确卸载,仍然存在于添加/删除控制面板和新版本中。如果我正确地理解了它,这会在旧安装程序的所有特性都卸载时发生,这就是为什么我尝试了下面描述的两种方法。如果我不捆绑VC再发行,旧产品将不再出现在控制面板中。

这种行为的原因是什么,我如何解决呢?

公共代码

代码语言:javascript
运行
复制
<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>

版本1:附加功能

代码语言:javascript
运行
复制
<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>

版本2:内部现有功能

代码语言:javascript
运行
复制
<Feature Id="App" Title="Main Application" Level="1">
    <ComponentGroupRef Id="App" />
    <ComponentRef Id="ApplicationShortcut" />
    <ComponentRef Id="CleanRegistry" />
    <ComponentGroupRef Id="SendToShortcuts" />
    <MergeRef Id="VCRedist86" />
</Feature>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-07 18:08:28

我会用详细的日志进行升级,看看到底发生了什么。特别是查看应用于升级的FindRelatedProduct事件(将有几次),并查看是否存在任何内容。

下面是我的猜测:一些C++合并模块强制每个系统安装一个。如果现有安装的产品是每个用户的,那么升级就不会发生,因为它是跨上下文的,因此您需要使用旧的和已安装的产品。我不知道当您提到“当旧安装程序的所有功能都已卸载时”时,您看到了什么,但是升级是对旧产品的卸载,因此没有理由将其部分抛在后面。具体来说,请查看合并模块的属性表,看看它是否有ALLUSERS=1条目。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45542293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档