Wix - 卸载删除文件但不删除文件夹
Posted
技术标签:
【中文标题】Wix - 卸载删除文件但不删除文件夹【英文标题】:Wix - uninstall remove files but not folders 【发布时间】:2014-10-14 06:25:39 【问题描述】:我使用 heat cmd 创建了一个 wix 安装程序。 卸载时,所有文件都被删除,但并非所有文件夹都被删除。 这是我的代码的相关部分:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="$(var.PlatformProgramFilesFolder)">
<Directory Id="companyDir" Name="companyName">
<Directory Id="INSTALLFOLDER" Name="AppName">
<Directory Id="INSTALLDIR" >
<Directory Id="bin" Name="bin">
<!-- Auto-start via Registry -->
<Component Id="AppNameAutoStartUp" Guid="MYGUID">
<Condition>AUTOMATIC_START_UP=1 OR Installed</Condition>
<RegistryValue Id="App.rst" Root="HKCU" Action="write" Key="Software\Microsoft\Windows\CurrentVersion\Run" Name="AppName" Value="[#AppName.exe] -sc" Type="string" />
</Component>
</Directory>
<Directory Id="docs" Name="Docs">
</Directory>
</Directory>
</Directory>
</Directory>
</Directory>
<Directory Id="CommonAppDataFolder">
<Directory Id="ConfCompanyDir" Name="Company">
<Directory Id="CONFINSTALLFOLDER" Name="AppName">
<Directory Id="CONFINSTALLDIR" >
<Directory Id="conf" Name="conf">
</Directory>
</Directory>
</Directory>
</Directory>
</Directory>
<!-- Shortcuts and Directories for Shortcuts -->
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="AppName">
<Component Id="ProgramFilesShortcut" Guid="MYGUID">
<Condition>DESKTOP_SHORTCUT = 1</Condition>
<Shortcut Id="desktopAppName" Directory="DesktopFolder" Name="AppName" Target="[#AppName.exe]" WorkingDirectory="bin" Icon="AppIcon.ico">
</Shortcut>
<RemoveFolder Id="ProgramFilesShortcut" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Name="installed" Type="integer" Value="1" KeyPath="yes" />
</Component>
<Component Id="ProgramMenuDir" Guid="MYGUID">
<Shortcut Id="startmenuAppName" Directory="ProgramMenuFolder" Name="AppName" Target="[#AppName.exe]" Icon="AppIcon.ico" WorkingDirectory="bin" Arguments="-s">
<!-- Set the AppID in order to get toasts to work -->
<ShortcutProperty Key="System.AppUserModel.ID" Value="Company.AppName" />
</Shortcut>
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Name="installed" Type="integer" Value="1" KeyPath="yes" />
</Component>
</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
卸载时会删除 Docs 文件夹,但不会删除 bin 文件夹(虽然它是空的,但所有文件都已删除)。 有谁知道为什么它没有被删除?
【问题讨论】:
【参考方案1】:我在你的 Feature 元素中添加了这样的代码:
<Component Directory='INSTALLDIR'>
<RemoveFolder Id='CleanupApplicationFolder' On='uninstall' />
</Component>
所以你应该更改 INSTALLDIR 到主文件夹(它应该全部卸载)。
【讨论】:
我不确定我是否理解您的回答。我试图像这样在我的行之间添加你的行:(但它不起作用)Directory="INSTALLFOLDER"
设置为那个组件然后尝试
我无法设置 Directory
属性,因为它嵌套在 Directory 元素下。如果尝试这样做,我会收到编译错误。
哦,对不起,我忘了提,将其添加到功能元素中 ^^ <Feature Id='TestProductFeature' Title='Wix File Product Feature' Level='1'><RemoveFolder Id='CleanupApplicationFolder' On='uninstall' /></Component></Feature>
这样。我编辑了答案~以上是关于Wix - 卸载删除文件但不删除文件夹的主要内容,如果未能解决你的问题,请参考以下文章