WIX XmlConfig操作未在修补程序回滚上运行

时间:2011-01-16 23:59:10

标签: installer wix uninstall

我有一个运行几个XmlConfig操作的组件:一个在安装上,一个在卸载上:

  <Component Id="machine.config.Update" Guid="573DF5B0-438D-498d-8919-C4B96835C1EF">
    <RegistryKey Root="HKLM" Key="[REGISTRYKEY]\Settings\[TITLE]" Action="createAndRemoveOnUninstall">
      <RegistryValue Action="write" Type="integer" Name="MACHINEMEMORYLIMIT" Value="1" KeyPath="yes"/>
    </RegistryKey>
    <util:XmlConfig
      Id="CacheNode.memoryLimit.add"
      File="[WindowsFolder]\Microsoft.NET\[FRAMEWORKDIR]\v2.0.50727\CONFIG\machine.Config"
      Action="create"
      ElementPath="/configuration/system.web/processModel"
      Name="memoryLimit"
      Node="value"
      On="install"
      Value="90" />
    <util:XmlConfig
      Id="CacheNode.memoryLimit.remove"
      File="[WindowsFolder]\Microsoft.NET\[FRAMEWORKDIR]\v2.0.50727\CONFIG\machine.Config"
      Action="delete"
      ElementPath="/configuration/system.web/processModel"
      VerifyPath="/configuration/system.web/processModel"
      Name="memoryLimit"
      Node="value"
      On="uninstall" />
  </Component>

该组件是我可以安装和回滚的补丁的一部分。问题是卸载补丁时卸载操作不会触发。奇怪的是,如果我将其更改为On="install",则会执行相同的XmlConfig操作。我看到在卸载时正确删除了注册表项。为什么XmlConfig操作也不会被触发?我检查了日志,没有看到任何错误或解释为什么它没有发生。

更新 执行完全卸载时,XmlConfig操作有效。只是没有补丁回滚。

2 个答案:

答案 0 :(得分:1)

从wix-users邮件列表中得到答案。

Rob Mensching: “在补丁中添加自定义操作效果不佳。补丁基本上将转换应用于现有的MSI,然后修复MSI。在卸载补丁的情况下,转换被删除并且MSI被修复。显然,如果自定义通过变换删除操作,然后它就没有机会运行。

Windows Installer会在转换前后跟踪MSI的状态,以便正确删除数据。“

他们还讨论了MSI 4.5中有哪些功能可以让你这样做,但WIX需要保持与早期版本兼容,并且周围仍然存在一些数据存储问题。

简而言之,补丁卸载的自定义操作在WIX中不起作用。

答案 1 :(得分:0)

我已经验证了您的样品(差不多),它运行正常。问题可能出在您的FRAMEWORKDIR属性中。确保在正确安装和卸载时都设置了它。

可能会出现这种情况,即它会回退到Uninstall flow的默认值,并且该属性会被删除,但是会从另一个文件中删除。