【问题标题】:Old Property with RegSearch is affecting Product upgrade (new version without this prop)带有 RegSearch 的旧属性正在影响产品升级(没有此属性的新版本)
【发布时间】:2017-08-18 17:08:50
【问题描述】:

我继承了在 WiX 中创建的 MSI 项目,现在我正在尝试解决一些不幸存在的问题。

有一个remember property pattern,用于查找注册表项中保存的特定目录:

<Property Id="AUTO_FOUND_DIR" Secure="yes" Admin="yes">
      <RegistrySearch Id="regsrch_AUTO_FOUND_DIR"
                      Root="HKCU"
                      Key="$(var.RegPath)"
                      Name="$(var.SpecificKey)"
                      Type="raw"
      />
</Property>

然后将SpecificKey 值保存在AUTO_FOUND_DIR 属性中。

然后黑魔法出现了。一个单独的组件持有(除其他外)一个位于ProgramMenuFolder(非广告)到主可执行文件的快捷方式。

有人告诉我,使用 util:RemoveFolderEx 是解决旧问题的一种解决方法,即此快捷方式在卸载过程中被孤立并且未被删除:

<Feature>
<DirectoryRef Id="ProgramMenuDir">
      <Component Id="cmp_ProgramMenuDir" Guid="{0E8BD13A-GUID-IS-HERE-6E5092ECA9EF}">
        <CreateFolder />
        <RemoveFolder Id='ProgramMenuDir' On='uninstall' />
        <RegistryKey Id='reg_SpecificKeyID' Root='HKCU' Key='$(var.RegPath)' ForceCreateOnInstall="yes">
          <RegistryValue Type='string' Name='$(var.SpecificKey)' Value='[ProgramMenuDir]'/>
        </RegistryKey>
        <!-- other content: shortcut to ProgramMenuFolder and other stuff -->
        <util:RemoveFolderEx Id="rm_dirID" On="install" Property="AUTO_FOUND_DIR"/>
      </Component>
    </DirectoryRef>
</Feature>

问题是:我不需要这种解决方法(以及 AUTO_FOUND_DIR 属性的使用。我已经删除了该代码,但在升级期间(主要,ProductPackage GUID 设置为 "*"UpgradeCode 与以前的版本具有相同的值)我可以在来自 MSI 的详细日志中看到这个AUTO_FOUND_DIR 存在,RegistrySearch 读取具有特定目录的键值,因此util:RemoveFolderEx 删除了该目录并那里的所有组件。

我的问题是:如何检测为什么在升级过程中使用了这个旧属性以及如何摆脱它?

附加信息:安装范围为PerMachineALLUSERS 设置为 1。升级版本的 MSI 已删除此属性。

【问题讨论】:

    标签: wix windows-installer major-upgrade


    【解决方案1】:

    如果不仔细查看完整的详细日志以了解发生了什么,请记住升级会卸载旧安装的产品。这意味着旧安装产品中的许多逻辑将在升级期间发生。因此,您肯定会看到 RegistrySearch 在旧产品卸载时运行,设置为 AUTO_FOUND_DIR,并且您将看到在卸载期间运行的 RemoveFolder。

    因此,如果您所看到的只是正在卸载的旧产品的卸载活动,那么您是否真的有问题尚不清楚。该活动嵌入在已安装的产品中。

    【讨论】:

    • 感谢菲尔的回复!是的,我知道卸载是升级的一部分,我读了你的书(谢谢!)和 MS 文档。在引入此属性的产品版本中,RemoveExistingProduct 安排在InstallExecute 之后。我已将其更改为 InstallInitialize 之后,这解决了问题但有副作用,因为我现在需要重新安排很多 CA。我应该更清楚 - 有没有办法在升级过程中以某种方式阻止 RegistrySearch 来自旧版本?
    猜你喜欢
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    相关资源
    最近更新 更多