【问题标题】:Bootstrapper GUID引导程序 GUID
【发布时间】:2014-11-04 18:54:25
【问题描述】:

WiX 烧录引导程序根据架构在 HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\SOMEGUIDHKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\SOMEGUID 中安装密钥。我注意到,每当我创建新版本时,SOMEGUID 都会发生变化。我有一些关于 SOMEGUID 的问题,如果有人能够阐明一些问题,以下任何问题的答案都会非常有帮助:

  1. 如何确定SOMEGUID从我的引导程序安装之前将是什么?
  2. 是否可以硬编码SOMEGUID

【问题讨论】:

    标签: .net wix installation bootstrapper burn


    【解决方案1】:
    1. 由 BundleID 属性确定。
    2. 不,它是内部设置的,我们无法控制它。

    每次编译引导程序项目时,都会为它分配一个新标识 — 一个名为 BundleId 的 GUID,您无法更改该标识。在这方面,您创建的每个捆绑包都是独一无二的。 UpgradeCode 属性允许我们链接两个引导程序,使它们成为相关的捆绑包。这种关系允许一个捆绑包检测和升级另一个捆绑包的已安装包。

    但是硬编码提供程序密钥的原因是什么?就像在 MSI 中一样,如果两个捆绑包具有相同的产品代码,它将无法正确处理主要/次要升级。

    【讨论】:

    • 以赛亚,这行不通。我试过了。行为如下:在我的Bundle 元素上设置ProviderKey 仅设置HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\SOMEGUID\@BundleProviderKey 值,但SOMEGUID 将始终采用与它不同的值,如果设置了ProviderKey。如果未设置,BundleProviderKeySOMEGUID 相同,但就像我上面提到的,我永远不知道安装后会实现什么。
    • 这个问题提到了与设置 ProviderKey 相同的问题,即没有为SOMEGUID 实现相同的值:stackoverflow.com/questions/26675457/…
    • 理性解释起来很复杂,但我会尽量用语言表达出来。每当我向 QA 发布新版本时,Burn 允许并排安装相同版本的自身,这让我很头疼,因为对于我的引导程序的相同版本,ARP 条目可能从 1 增加到许多。所以,我所做的是我隐藏了我的引导程序在 ARP 中不可见,并且只显示它安装的 MSI 包可见。我正在尝试保持引导程序到 MSI 和 MSI 到引导程序的关系......
    • ...理想情况下,如果我从引导程序安装,我应该能够从 MSI 修复/删除,反之亦然;如果我从 MSI 安装,我应该能够从引导程序中进行修复/删除。在我的 MSI 文件中,我有一个自定义操作,它在某些条件下(例如,如果它被删除,而不是升级等)使用简单的 cmd 从其卸载密钥卸载引导程序,但在安装时,我需要如果我首先从 MSI 安装,“欺骗”引导程序认为它已安装。
    • 基本上,如果我先从 MSI 安装,然后运行引导程序,引导程序仍然显示安装选项;单击安装只会在注册表中注册其卸载密钥。我只需要一种方法让它直接进入卸载/修复屏幕...一种方法是在HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\SOMEGUID 中添加一个注册表项@Installed (DWORD) = 1。
    【解决方案2】:

    我使用的是 Wix 3.11 版本,并使用以下步骤为 Bundle 包含自定义 ProviderKey 1. 将 WixDependancy.dll 的引用添加到 Project。 2.为添加为

    的dll文件添加额外的标记
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"  xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" xmlns:dep="http://schemas.microsoft.com/wix/DependencyExtension">
    

    3.然后使用关键字dep将Provide key定义为

    <Bundle Name="ABC" ParentName="ParentName" Version="x.x.x." Manufacturer="ABC Company" UpgradeCode="A-a-a-a-a" dep:ProviderKey="b-b-b-b-b">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 1970-01-01
      • 2012-06-14
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多