WiX在卸载时不会删除registrykey

时间:2010-07-23 10:24:06

标签: wix windows-installer installation

我创建了一个带有条件DISABLEMSIUPGRADE的组件,当我使用我们的ExternalUI安装MSI时,它会被设置。但是,MSI不会删除UnInstall上的条目。我认为问题是由条件引起的,但我无法修复它。

<Component Id="compMSI" Guid="5f18af6a-b839-4b4d-9d4f-79cf7826f749">
  <Condition>DISABLEMSIUPGRADE</Condition>

  <RegistryKey Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(var.PGuid)" Action="createAndRemoveOnUninstall">
    <RegistryValue Name="DisplayName" Type="string" Value="$(var.ProductTitle)" />
    <!-- ... -->
  </RegistryKey>
</Component>

我甚至将RemoveRegistryKey元素放在其他组件中以确保删除键,但这也没有完成任务...

我还尝试在Key中存储和读取DISABLEMSIUPGRADE属性。

//编辑:我进行了一些实验,发现CONDITION元素不是原因。我看起来如果我安装了另一个版本的安装程序,则注册表项不会被删除。什么可能导致这种情况?

2 个答案:

答案 0 :(得分:16)

答案 1 :(得分:2)

如果您有一个组件(请记住组件是由MSI文件之外的@Guid标识的),那么只有在最后一个MSI卸载时才会删除组件。同样,上面链接的Component Rules blog entry解释了原因。

最后,详细的日志文件将显示所有组件的安装状态。