gpt4 book ai didi

windows - Wix 在捆绑 VC 可再发行组件后无法正常工作

转载 作者:可可西里 更新时间:2023-11-01 11:45:44 24 4
gpt4 key购买 nike

我们最近决定将 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>

版本 1:附加功能

<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:在现有功能中

<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 条目。

关于windows - Wix <MajorUpgrade> 在捆绑 VC 可再发行组件后无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45542293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com