3 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
使用RemoveFile元素和On =“ uninstall ”。這是一個(gè)例子:
<Directory Id="CommonAppDataFolder" Name="CommonAppDataFolder"> <Directory Id="MyAppFolder" Name="My"> <Component Id="MyAppFolder" Guid="*"> <CreateFolder /> <RemoveFile Id="PurgeAppFolder" Name="*.*" On="uninstall" /> </Component> </Directory></Directory>
更新
它不起作用100%。它刪除了文件,但沒(méi)有刪除任何其他目錄 - 安裝后創(chuàng)建的目錄。有什么想法嗎? - pribeiro
遺憾的是,Windows Installer不支持使用子目錄刪除目錄。在這種情況下,您必須采取自定義操作。或者,如果您知道子文件夾是什么,請(qǐng)創(chuàng)建一堆RemoveFolder和RemoveFile元素。

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
RemoveFolderEx
在WiX中使用Util擴(kuò)展中的元素。
使用此方法,還會(huì)刪除所有子目錄(而不是直接使用RemoveFile
元素)。此元素在MSI數(shù)據(jù)庫(kù)中添加臨時(shí)行RemoveFile
和RemoveFolder
表。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
為此,我只是創(chuàng)建了一個(gè)在卸載時(shí)調(diào)用的自定義操作。
WiX代碼如下所示:
<Binary Id="InstallUtil" src="InstallUtilLib.dll" /><CustomAction Id="DIRCA_TARGETDIR" Return="check" Execute="firstSequence" Property="TARGETDIR" Value="[ProgramFilesFolder][Manufacturer]\[ProductName]" /><CustomAction Id="Uninstall" BinaryKey="InstallUtil" DllEntry="ManagedInstall" Execute="deferred" /><CustomAction Id="UninstallSetProp" Property="Uninstall" Value="/installtype=notransaction /action=uninstall /LogFile= /targetDir="[TARGETDIR]\Bin" "[#InstallerCustomActionsDLL]" "[#InstallerCustomActionsDLLCONFIG]"" /><Directory Id="BinFolder" Name="Bin" > <Component Id="InstallerCustomActions" Guid="*"> <File Id="InstallerCustomActionsDLL" Name="SetupCA.dll" LongName="InstallerCustomActions.dll" src="InstallerCustomActions.dll" Vital="yes" KeyPath="yes" DiskId="1" Compressed="no" /> <File Id="InstallerCustomActionsDLLCONFIG" Name="SetupCA.con" LongName="InstallerCustomActions.dll.Config" src="InstallerCustomActions.dll.Config" Vital="yes" DiskId="1" /> </Component></Directory><Feature Id="Complete" Level="1" ConfigurableDirectory="TARGETDIR"> <ComponentRef Id="InstallerCustomActions" /></Feature><InstallExecuteSequence> <Custom Action="UninstallSetProp" After="MsiUnpublishAssemblies">$InstallerCustomActions=2</Custom> <Custom Action="Uninstall" After="UninstallSetProp">$InstallerCustomActions=2</Custom></InstallExecuteSequence>
InstallerCustomActions.DLL中的OnBeforeUninstall方法的代碼如下所示(在VB中)。
Protected Overrides Sub OnBeforeUninstall(ByVal savedState As System.Collections.IDictionary) MyBase.OnBeforeUninstall(savedState) Try Dim CommonAppData As String = Me.Context.Parameters("CommonAppData") If CommonAppData.StartsWith("\") And Not CommonAppData.StartsWith("\\") Then CommonAppData = "\" + CommonAppData End If Dim targetDir As String = Me.Context.Parameters("targetDir") If targetDir.StartsWith("\") And Not targetDir.StartsWith("\\") Then targetDir = "\" + targetDir End If DeleteFile("<filename.extension>", targetDir) 'delete from bin directory DeleteDirectory("*.*", "<DirectoryName>") 'delete any extra directories created by program Catch End TryEnd SubPrivate Sub DeleteFile(ByVal searchPattern As String, ByVal deleteDir As String) Try For Each fileName As String In Directory.GetFiles(deleteDir, searchPattern) File.Delete(fileName) Next Catch End TryEnd SubPrivate Sub DeleteDirectory(ByVal searchPattern As String, ByVal deleteDir As String) Try For Each dirName As String In Directory.GetDirectories(deleteDir, searchPattern) Directory.Delete(dirName) Next Catch End TryEnd Sub
添加回答
舉報(bào)