RegSearch的旧属性正在影响产品升级(没有此道具的新版本)

时间:2017-08-18 17:08:50

标签: wix windows-installer major-upgrade

我继承了在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属性的使用。我已经删除了该代码,但在升级期间(主要,Product和{ {1}}设置为Package"*"的GUID与先前版本具有相同的值)我可以在MSI的详细日志中看到此UpgradeCode存在,AUTO_FOUND_DIR读取特定目录的键值,因此RegistrySearch删除该目录及其所在的所有组件。

我的问题是:我怎样才能检测升级过程中这个旧属性的使用原因以及如何摆脱它?

其他信息:安装范围为util:RemoveFolderExPerMachine设置为1.已升级版本的MSI已删除此属性。

1 个答案:

答案 0 :(得分:1)

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

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