如何在卸载时从ProgramData文件夹中删除文件和文件夹

时间:2017-02-08 17:04:10

标签: vb.net wix

您好,我在使用Wix安装程序删除卸载元素时遇到问题。问题文件夹和文件位于我们公司指定的programdata文件夹' D:\ programdata'中。文件夹创建正常,但在卸载时不会删除。文件夹结构如下

 D:\programdata
      Company Name
        App Name
          Logs
          QueryOutput

以下摘录自product.wxs文件的相关部分:

 <Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="CommonAppDataFolder" Name="CommonAppData" >
    <Directory Id="dirCompanyAppData" Name="Company Name">
      <Directory Id="dirAppNameAppData" Name="AppName">
        <Component Id="cmpDirCommonAppData" Guid="{F808944A-D898-43F3-BA1D-A35A3FD7DF41}" KeyPath="yes">
          <CreateFolder Directory="dirAppNameAppData" />
          <RemoveFile Id="PurgeAppName" Name="*.*" On="uninstall" />
          <RemoveFolder Id="idDirAppNameAppData" On="uninstall" Directory="dirAppNameAppData" />
        </Component>
      </Directory>
      <Component Id="cmpDirCompanyName" Guid="{A1E7E75A-D582-40C5-BD6B-D36BFB11795E}" KeyPath="yes">
        <RemoveFile Id="PurgeCompanyName" Name="*.*" On="uninstall" />
        <RemoveFolder Id="idDirCompanName" On="uninstall" Directory="dirCompanyNameAppData" />
      </Component>          
    </Directory>
  </Directory>
  <Directory Id="ProgramFilesFolder">
  ... etc

注意公司和应用程序标识元素已在代码中替换。为简洁起见,我遗漏了wxs文件的其余部分,因为我相信相关代码包含在此提取中。任何帮助都非常感激,这让我很难过。

亲切的问候 保罗J。

1 个答案:

答案 0 :(得分:0)

来自RemoveFolder定义:

  

如果选择安装或删除父组件,则删除空文件夹

在您的情况下,AppData文件夹可能具有与之相应的用户特定配置。

我认为首先完成所有组件规划,然后执行。因此,RemoveFile将计划要删除的文件夹中的所有文件,RemoveFolder将决定不删除该文件夹,因为在规划时,文件夹中仍然包含部分的内容安装包括组件,因此不是空的。

您需要使用util:RemoveFolderEx。再次提出另一个警告就是使用它。

  

由于它可能会显着影响Windows Installer的文件成本核算,因此必须在CostInitialize标准操作之前写入临时行。遗憾的是,MSI不会在您的包中创建Directory层次结构的属性,直到稍后,在CostFinalize操作中。

因此,您需要在WixRemoveFoldersEx操作之前根据您可能从注册表中读取的属性手动设置目录,我认为该操作是在CostInitialize之前安排的。