卸載WiX時刪除文件卸載我的應用程序時,我想配置Wix設置以刪除原始安裝后添加的所有文件??雌饋硇遁d程序只刪除了最初從MSI文件安裝的目錄和文件,并且它保留了稍后在應用程序文件夾中添加的所有其他內容。換句話說,我想在卸載時清除目錄。我怎么做?
3 回答

哈士奇WWW
TA貢獻1799條經驗 獲得超6個贊
使用RemoveFile元素和On =“ uninstall ”。這是一個例子:
<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%。它刪除了文件,但沒有刪除任何其他目錄 - 安裝后創建的目錄。有什么想法嗎? - pribeiro
遺憾的是,Windows Installer不支持使用子目錄刪除目錄。在這種情況下,您必須采取自定義操作?;蛘撸绻雷游募A是什么,請創建一堆RemoveFolder和RemoveFile元素。

神不在的星期二
TA貢獻1963條經驗 獲得超6個贊
RemoveFolderEx
在WiX中使用Util擴展中的元素。
使用此方法,還會刪除所有子目錄(而不是直接使用RemoveFile
元素)。此元素在MSI數據庫中添加臨時行RemoveFile
和RemoveFolder
表。

HUH函數
TA貢獻1836條經驗 獲得超4個贊
為此,我只是創建了一個在卸載時調用的自定義操作。
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
添加回答
舉報
0/150
提交
取消