【问题标题】:Preserve old version of product during major upgrade在重大升级期间保留旧版本的产品
【发布时间】:2015-04-23 01:10:45
【问题描述】:

伙计们,

我有以下情况:我希望在主要升级期间保留正在升级的产品版本(例如,如果我从 1.1 升级到 1.2,则保存值 1.1)并运行传递此版本的可执行文件一个参数,在新产品安装完成后。这意味着我将在InstallFinalize 附近的某个地方调用它。我发现这篇文章对我的案例很有帮助:http://blogs.technet.com/b/alexshev/archive/2008/02/21/from-msi-to-wix-part-5-custom-actions.aspx

我遇到的问题是我不知道也找不到关于何时设置属性的解释。何时执行此注册表搜索。我是要在升级开始时设置一次此属性,还是在调用该属性时动态设置?

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    如果您使用的是 WiX 主要升级元素,这应该可以在 AllowDowngrades 设置为 yes 的情况下使用。无需手动尝试以某种方式设置版本。见这里:

    http://wixtoolset.org/documentation/manual/v3/xsd/wix/majorupgrade.html

    其中显示“AllowDowngrades 已经允许具有相同版本号的两个产品相互升级。”

    在尝试运行代码之前一定要试试这个。请注意,ProductVersion 属性不是“设置”的 - 它位于 MSI 文件中,并从那里传输到系统。

    【讨论】:

    • 这是否意味着如果我有以下内容:<Property Id="PRODUCT_VERSION"> <RegistrySearch Id="Reg_SetProductVersion" Root="HKLM" Key="$(var.ProductRegistryKey)" Name="ProductVersion" Type="raw"/> </Property> PRODUCT_VERSION 将拥有我的旧产品版本?
    • 我无法判断,因为实际值很重要。您只需要一个允许降级的 WiX 主要升级元素,除了新的 MSI 是相同的,除了新的 ProductCode 和 PackageCode 以及您更改的任何文件。
    • 旧版本为1.0.0,新版本为1.1.0。
    • 您的原始帖子说,引用“如果我从 1.1 升级到 1.2,以保存值 1.1)”所以我现在很困惑。无论哪种方式,AllowDowngrades 都应该允许用相同版本替换任何版本,我认为这是问题所在。
    • 版本不是问题。问题是我想获取旧版本(当前安装的应用程序)并将其设置为属性。我正在使用以下内容:<Property Id="OLD_VERSION_PROPERTY"> <RegistrySearch Id="Reg_SetAppDataDirr" Root="HKLM" Key="$(var.ProductRegistryKey)" Name="ProductVersion" Type="raw"/> </Property> <SetProperty Id="OLD_VERSION" Before="FindRelatedProducts" Value="..[OLD_VERSION_PROPERTY]" /> 但是,当我在自定义操作中获取属性时,它始终是新版本而不是旧版本。
    猜你喜欢
    • 2020-04-30
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2011-11-13
    • 2017-08-20
    相关资源
    最近更新 更多