如果注册表项不存在,请删除文件夹

时间:2016-07-08 05:47:51

标签: wix windows-installer conditional-statements bootstrapper burn

如果注册表中的某个文件夹路径不存在,我需要删除文件夹。我写了下面的代码,但它不起作用。该文件夹不会被删除,也不会记录日志中的条件检查。

 <Property Id="UPDATERSERVICEFOLDER">
  <RegistrySearch Key="SYSTEM\CurrentControlSet\Services\UpdaterService\Parameters" Root="HKLM" Type="raw" Id="UpdateDirectoryRegistrySearch" Name="UpdaterServicePath" />
</Property>

  <Component Id="RemoveFolder" Directory="MyProgramDir" Guid="*" >
    <RemoveFolder Id="MosquittoInstallDir" On="uninstall"/>
    <Condition><![CDATA[UPDATERSERVICEFOLDER]]></Condition>
  </Component>

我在这里做错了什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果处理组件时文件夹中有任何,则RemoveFolder无法删除该文件夹。您可能遇到的问题是,在处理该文件夹中表示某些内容的所有其他组件之前,或者在此文件夹中存在不属于您的安装的文件时,将对此组件进行处理。

我不知道是否有办法强制最后处理组件。您可以尝试的另一种选择是Util:RemoveFolderEx。请注意本页底部的注释非常重要。这基本上是说你不能使用目录属性来定义要删除的路径;你不能使用[MyProgramDir]作为财产。为此Util实现Property的建议方法:RemoveFolderEx是使用注册表搜索来获取正确的路径,然后使用注册表搜索设置的属性。