2017-10-17 4 views
1

Je crée une application C# .NET WinForms et je crée le programme d'installation en tant que projet d'installation de Visual Studio.Projet d'installation de Visual Studio - les fichiers créés lors de l'exécution ne sont pas supprimés lors de la désinstallation

Sur Windows 10, je peux supprimer les fichiers installés dans le panneau de configuration. Cependant, pendant l'exécution, mon application crée un dossier contenant des fichiers journaux, et ce dossier et les fichiers journaux ne sont pas supprimés lorsque l'application est désinstallée.

Comment puis-je supprimer ces fichiers lors de la désinstallation du programme?

+0

Utilisez-vous ClickOnce pour publier l'application? – ZerosAndOnes

+0

Je ne sais pas ce que ClickOnce est .. Je construis l'installateur dans Visual Studio – shadowsora

+0

Duplication possible de [Suppression de fichiers supplémentaires après la désinstallation d'une application clickonce] (https://stackoverflow.com/questions/7829151/removing-extra-files-after -uninstalling-a-clickonce-application) – user12345

Répondre

3

Vous pouvez utiliser une action d'installation personnalisée pour effectuer des actions personnalisées lors de l'installation ou de la désinstallation de l'application. Pour ce faire, vous devez ajouter une nouvelle bibliothèque de classes contenant une classe dérivée de CustomAction.

Pour ce faire, procédez comme suit:

  1. Ajouter un nouveau projet d'installation. (Si vous n'avez pas de modèle de projet, téléchargez-le et installez-le ici pour VS2013, VS2015 ou VS2017)
  2. Ajoutez la sortie primaire de votre projet principal au projet d'installation.
  3. Ajouter un nouveau projet de bibliothèque de classes.
  4. Ajoutez une nouvelle action d'installation au projet de bibliothèque de classes et utilisez le code à la fin de ces étapes.
  5. Ajouter une sortie principale de la bibliothèque de classes au projet d'installation
  6. Faites un clic droit sur le projet d'installation dans l'explorateur de solution et dans le menu Vue, sélectionnez Actions personnalisées.
  7. Dans l'éditeur d'actin personnalisé, faites un clic droit sur désinstaller et sélectionnez Ajouter une action personnalisée ... et sélectionnez la sortie principale de la bibliothèque de classes.
  8. Renommez l'action en RemoveFiles et définissez les propriétés CustomActionData sur /path="[TARGETDIR]\".
  9. Reconstruisez la solution et le projet d'installation.
  10. Installez le projet.

code d'action personnalisé

Ajouter une référence à l'assemblage System.Configuration.Install puis ajouter une classe au projet ayant contenu suivant. Vous pouvez simplement avoir toute la logique dont vous avez besoin ici.

using System.Collections; 
using System.ComponentModel; 
using System.Configuration.Install; 

namespace InstallerActions 
{ 
    [RunInstaller(true)] 
    public partial class RemoveFiles : Installer 
    { 
     protected override void OnAfterUninstall(IDictionary savedState) 
     { 
      var path = System.IO.Path.Combine(Context.Parameters["path"], "log"); 
      System.IO.Directory.Delete(path, true); 
     } 
    } 
} 
+0

Exactement ce que je cherchais! Je me demande juste, au lieu d'utiliser le répertoire cible spécifique, y at-il de toute façon je peux récupérer le répertoire d'installation? AppDomain.CurrentDomain.BaseDirectory (ce que j'utilise dans l'application principale) n'a pas réussi – shadowsora

+1

'Context.Parameters [" path "]' est le répertoire d'installation. –