您好,我在使用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。
答案 0 :(得分:0)
来自RemoveFolder定义:
如果选择安装或删除父组件,则删除空文件夹。
在您的情况下,AppData文件夹可能具有与之相应的用户特定配置。
我认为首先完成所有组件规划,然后执行。因此,RemoveFile将计划要删除的文件夹中的所有文件,RemoveFolder将决定不删除该文件夹,因为在规划时,文件夹中仍然包含不部分的内容安装包括组件,因此不是空的。
您需要使用util:RemoveFolderEx。再次提出另一个警告就是使用它。
由于它可能会显着影响Windows Installer的文件成本核算,因此必须在CostInitialize标准操作之前写入临时行。遗憾的是,MSI不会在您的包中创建Directory层次结构的属性,直到稍后,在CostFinalize操作中。
因此,您需要在WixRemoveFoldersEx操作之前根据您可能从注册表中读取的属性手动设置目录,我认为该操作是在CostInitialize之前安排的。