【问题标题】:Wix: Reschedule RegisrySearch and set property in Merge ModuleWix:重新安排 RegisrySearch 并在合并模块中设置属性
【发布时间】:2018-10-06 18:17:44
【问题描述】:

我有一个合并模块,它搜索一些注册表位置以读取值并保存到属性。这是代码段:

  <Fragment Id="RegSearch">
<Property Id="HOST_APP_PATH" >
  <RegistrySearch Id="HOST_App"  
                  Root="HKLM"
                  Key="SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\HOST.exe"
                  Name="Path"
                  Type="raw"
                  />
</Property>
<Property Id="HOST_ROOT_PATH" >
  <RegistrySearch Id="HOST_Root"
                  Root="HKLM"
                  Key="SOFTWARE\HostApplication\Installation Info"
                  Name="HOST_Root"
                  Type="raw"
                  />
</Property>

Windows Installer 将此搜索置于 AppSearch 自定义操作中。

问题: AppSearch 很早就执行了这个搜索,在 Host Installer 的 WriteRegistryValues 之前,它不会得到任何值和属性,这个搜索不会被定义,因为要搜索的注册表从未被写入在那里。

问题 1:我们可以在 Host Installer 的 WriteRegistryValues 之后从合并模块重新安排此注册表搜索吗?

问题2: Host Installer 执行WriteRegistryValues 后有没有其他方法可以搜索注册表?可能有一些自定义操作?

【问题讨论】:

    标签: wix windows-installer custom-action merge-module


    【解决方案1】:

    AppSearch 是 Windows 安装程序提供的标准操作,设计目的是在很早的时候运行。这是因为 LaunchConditions 标准操作经常使用它来决定安装是否可以继续。它对于决定是否应安装功能和组件也很有用。

    MSI 是一个非常固执己见的框架。我怀疑您当前的设计存在与 MSI 不兼容的问题。

    主机安装程序是相同的 MSI 还是不同的 MSI?假设它是一样的,为什么你不能把你的数据放在一些 MSI 属性中并使用这些属性写入注册表?然后你就不需要再读回这些值了,因为你已经在属性中拥有它们了。

    将这些属性写入注册表后,您需要这些属性做什么?通常将它们写入注册表将是最终游戏。我不确定你接下来要做什么。

    如果 host.msi 是不同的 MSI,为什么要让一个 MSI 安装另一个 MSI?那不是微星的设计。在这种情况下,您将需要一个引导程序。主机 MSI 将首先运行,然后是此 MSI。但即便如此,第二个 MSI 将取决于第一个 MSI 设置的属性,这有点奇怪。我认为引导程序 UI 和应用程序会收集这些信息并将其作为安全的自定义公共属性传递给两个 MSI。

    回答问题 1:没有一个合并模块只能将动作插入到序列中。它无法重新安排操作。 2:您必须使用自定义操作。但正如我上面所说,这对我来说是一条错误的道路。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多