我有一个wix安装项目,它创建一个ProgramMenu快捷方式和一个桌面快捷方式。我可以使用 RemoveFolder 删除这些快捷方式。
<!-- To remove Desktop shortcut -->
<RemoveFolder Id="RemoveDesktopFolder" Directory="DesktopFolder" On="uninstall"/>
<!-- To remove ProgramMenu shortcut-->
<RemoveFolder Id="CleanUpShortCut" Directory="ApplicationProgramsFolder" On="uninstall" />
但是,在卸载时,我还希望能够清除当前用户的LocalAppData。更具体地说,用户\ CurrentUser \ AppData \ Local \ my_application
到目前为止,我已经发现 RemoveFolder 不会递归删除文件而我必须使用 util:RemoveFolderEx。我就是这样做的:
<Directory Id="LocalAppDataFolder" Name="Local">
<Directory Id="RemoveLocalData" Name="my_application">
<Component Id="RemoveLocalAppData" Guid="PUT-GUID-HERE">
<util:RemoveFolderEx On="uninstall" Property="RemoveLocalData"/>
<RemoveFolder Id="RemoveLocalData" On="uninstall"/>
</Component>
</Directory>
</Directory>
我得到了这个错误:
ICE38: 组件RemoveLocalAppData安装到用户配置文件。它必须使用 HKCU下的注册表项作为其KeyPath,而不是文件。
我认为我没有正确使用 RemoveFolderEx ,但在这种情况下我不知道清除LocalAppData的正确方法。
注意,我不会在安装过程中创建该文件夹。相反,此[LocalAppData] \ my_application是在应用程序运行时在安装后创建的。
答案 0 :(得分:1)
最后在以下链接的帮助下设法删除了当前用户的LocalAppData(缓存):https://pkisensee.wordpress.com/2015/10/06/windows-installer-removing-folders/
为了成功删除应用程序的LocalAppData文件夹,我必须在注册表中搜索(使用 RegistrySearch )获取应用程序缓存文件夹的位置并将其存储在 Property 强>
<Property Id="CACHEFOLDER">
<RegistrySearch Key="Software\CompanyName\AppName" Root="HKCU" Type="raw"
Id="CacheFolderRegSearch" Name="CachePath" />
</Property>
但是,此注册表项目不存在,并且路径无法解析。因此,在安装过程中,我必须在注册表中保存LocalAppData缓存文件夹的位置,以便在卸载时,我可以执行 RegistrySearch 并通过 util:RemoveFolderEx <递归删除缓存文件夹/强>
为此,我在组件中设置了 RegistryValue :
<Directory Id="TARGETDIR" Name="SourceDir">
<!-- ... -->
<!-- This is the name of the cache folder in LocalAppData -->
<!-- In this case the cache folder is in \Users\CurrentUser\AppData\Local\MyAppCache -->
<?define AppCacheFolder = "MyAppCache" ?>
<Component Id="CacheCleanup" Guid="*">
<RegistryValue Root="HKCU" Key="Software\CompanyName\AppName" Name="CachePath"
Type="string" Value="[LocalAppData]$(var.AppCacheFolder)"
KeyPath="yes" />
<util:RemoveFolderEx On="uninstall" Property="CACHEFOLDER"/>
</Component>
<!-- ... -->
</Directory>
请注意,这是在 TARGETDIR 目录
中完成的
最后,需要将该组件注册到功能
<Feature Id="MainApplication" Title="App Name" Level="1">
<!-- Other Components -->
<ComponentRef Id="CacheCleanup" />
</Feature>