首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WIX升级安装新版本后删除ExePackages

WIX升级安装新版本后删除ExePackages
EN

Stack Overflow用户
提问于 2022-05-05 17:08:37
回答 1查看 82关注 0票数 1

如何在升级安装过程中防止Wix刻录删除ExePackage

背景:我正在使用带有自定义引导程序应用程序的Wix3.11创建一个安装程序,以及多个ExePackageMsiPackage的安装程序,其中一些ExePackages安装依赖项不太可能在我们的产品版本之间发生变化。在发布安装程序的第一个版本之前,我正在尝试测试一个升级场景。

下面是一个我的ExePackages的例子

代码语言:javascript
复制
<ExePackage
    Id="InstallDependencyApp"
    DisplayName ="DependencyApp"
    SourceFile="$(var.InstallerApp.TargetPath)"
    CacheId="E1FFF6FF-0B84-41B4-982E-B8920DBA6A73"
    PerMachine="yes"
    DetectCondition="DependencyApp_InstalledVersion &gt;= DependencyApp_BundleVersion"
    InstallCommand="install dependencyApp [INSTALLCONFIG] [WixBundleLog_InstallDependencyApp]"
    UninstallCommand="uninstall dependencyApp [INSTALLCONFIG] [WixBundleLog_InstallDependencyApp]">
        <PayloadGroupRef Id="ExeDeps"/>
        <ExitCode Behavior="success" Value="0"/>
        <ExitCode Behavior="error" Value="-1"/>
</ExePackage>

据我所知,在升级期间,Wix引导程序将安装所有软件包的新版本,然后触发对旧引导程序的无声卸载。

在我的例子中,所发生的事情是升级安装程序(适当地)跳过依赖安装程序的ExePackages,因为DetectCondition表示它们已经安装了。然后,上一个版本的卸载程序运行,并移除ExePackages,尽管新版本仍然需要它们作为依赖项。

如果卸载发生在升级安装之前,就可以了,因为依赖项将被卸载,然后重新安装。但我不认为当卸载发生在链中时,我无法更改。

我认为我可以通过在我的引导程序中的PlanPackageBegin侦听器中放置一些自定义逻辑来解决这个问题,这将有条件地跳过在升级场景中卸载带有特定I的包。不过,这似乎是个麻烦的解决办法。是否有更好的方法来配置我的包来正确处理这些包?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-05 23:35:20

若要启用引用计数,请声明包的依赖项提供程序:

代码语言:javascript
复制
<ExePackage>
  <dep:Provides Key="MyKey" Version="1.0.0.0" />
</ExePackage>

这意味着在安装包时,包会注册该提供程序,并为其自身添加一个引用计数。在升级期间,新包将向提供者添加自己的引用。当旧包被卸载时,它会看到仍然存在引用,并且只会删除它的引用,而不是卸载包。

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

https://stackoverflow.com/questions/72131101

复制
相关文章

相似问题

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