Rimozione di file durante la disinstallazione di WiX

Quando si disinstalla la mia applicazione, mi piacerebbe configurare l’installazione Wix per rimuovere tutti i file che sono stati aggiunti dopo l’installazione originale . Sembra che il programma di disinstallazione rimuova solo le directory e i file che sono stati originariamente installati dal file MSI e lascia tutto il resto che è stato aggiunto in seguito nella cartella dell’applicazione. In altre parole, mi piacerebbe eliminare la directory durante la disinstallazione. Come lo faccio?

Usa l’elemento RemoveFile con On = ” uninstall “. Ecco un esempio:

        

Aggiornare

Non ha funzionato al 100%. Ha rimosso i file, tuttavia nessuna delle directory aggiuntive, quelle create dopo l’installazione, sono state rimosse. Qualche idea su questo? – pribeiro

Sfortunatamente Windows Installer non supporta l’eliminazione di directory con sottodirectory. In questo caso devi ricorrere all’azione personalizzata. Oppure, se si conoscono le sottocartelle, creare un gruppo di elementi RemoveFolder e RemoveFile.

Usa RemoveFolderEx elemento RemoveFolderEx dall’estensione di Util in WiX.
Con questo approccio, vengono rimosse anche tutte le sottodirectory (anziché utilizzare direttamente l’elemento RemoveFile ). Questo elemento aggiunge righe temporanee alla tabella RemoveFile e RemoveFolder nel database MSI.

Per fare ciò, ho semplicemente creato un’azione personalizzata da richiamare alla disinstallazione.

Il codice WiX sarà simile a questo:

               $InstallerCustomActions=2 $InstallerCustomActions=2  

Il codice per il metodo OnBeforeUninstall in InstallerCustomActions.DLL sarà simile a questo (in 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("", targetDir) 'delete from bin directory DeleteDirectory("*.*", "") 'delete any extra directories created by program Catch End Try End Sub Private 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 Try End Sub Private 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 Try End Sub 

Non è un esperto WIX, ma una ansible (più semplice?) Soluzione potrebbe essere quella di eseguire l’ azione personalizzata Quiet Execution che fa parte delle estensioni integrate di WIX?

Potrebbe eseguire il comando MS DOS rmdir con le opzioni / S e / Q.

  

E l’azione personalizzata che fa il lavoro è semplice:

  

Quindi dovrai modificare InstallExecuteSequence come documentato in molti posti.

Aggiornamento: ha avuto problemi con questo approccio. Alla fine si è conclusa un’attività personalizzata, ma continua a ritenerla una soluzione valida, ma senza far funzionare i dettagli.

Ecco una variazione sul suggerimento di @ tronda. Sto cancellando un file “install.log” che viene creato da un’altra azione personalizzata, durante la disinstallazione:

     REMOVE="ALL"    

Per quanto ho capito, non posso usare “RemoveFile” perché questo file viene creato dopo l’installazione e non fa parte di un gruppo di componenti.

Questa sarebbe una risposta più completa per il suggerimento @Pavel , per me funziona al 100%:

  < ?define RegDir="SYSTEM\ControlSet001\services\[Manufacturer]:[ProductName]"?> < ?define RegValueName="InstallDir"?>             

E, sotto Elemento prodotto:

    

Questo approccio imposta un valore di registro con il percorso desiderato della cartella da eliminare al momento della disinstallazione. Al termine, sia la cartella INSTALLFOLDER che quella del registro vengono rimosse dal sistema. Si noti che il percorso del registro può trovarsi in altri hive e altre posizioni.