2009-09-16 7 views
0

je vais avoir une classe d'installation, voici un extrait:classe personnalisée d'installation, méthode Rollback jamais appelé

[RunInstaller(true)] 
public partial class ServerWrapInstaller : Installer 
{ 
    public override void Install(IDictionary stateSaver) 
    { 
     EventLog.WriteEntry("Installer", "Install", EventLogEntryType.Information); 
     base.Install(stateSaver); 
    } 

    public override void Commit(IDictionary savedState) 
    { 
     EventLog.WriteEntry("Installer", "Commit", EventLogEntryType.Information); 
     base.Commit(savedState); 
    } 

    public override void Rollback(IDictionary savedState) 
    { 
     EventLog.WriteEntry("Installer", "Rollback", EventLogEntryType.Information); 
     base.Rollback(savedState); 
    } 

    public override void Uninstall(IDictionary savedState) 
    { 
     EventLog.WriteEntry("Installer", "UnInstall", EventLogEntryType.Information); 
     base.Uninstall(savedState); 
    } 
} 

Maintenant, je commence l'installation en pleine mode graphique, puis cliquez sur le bouton « Annuler » dans le milieu du processus provoquant l'annulation de l'installation. Le problème est que la méthode RollBack n'est pas appelée. Je ne vois pas l'entrée attendue dans le journal des événements.

Je tiens à mentionner que si je laisse l'installation se terminer, je vois le message "Installer" dans le journal des événements et si je puis désinstaller, je vois le message "désinstaller" dans le journal des événements. Mais si vous arrêtez le processus d'installation au milieu, en appuyant sur le bouton "annuler", je vois la barre de progression revenir en arrière, mais la méthode d'annulation n'est pas appelée.

qu'est-ce que je fais mal? Merci d'avance pour votre aide.

Edit:

Fournir plus de détails ...

Le programme d'installation est un package MSI.

Le package est intégré dans vs2009 à l'aide d'un projet d'installation. La classe d'installation est utilisée comme une action personnalisée par le projet d'installation.

Comme il s'agit d'un package MSI, j'ai une option pour l'exécuter en mode silencieux ou en mode interactif plus. Lorsque j'ai écrit "Mode graphique complet", j'utilise le mode interactif.

+0

Que voulez-vous dire en exécutant l'installation en mode graphique complet? Votre ServerWrapInstaller est-il utilisé par un paquet .msi ou une application de configuration? Si oui, quelle technologie avez-vous utilisée pour créer l'installateur? –

+0

Marque: J'ai édité le message – user88637

Répondre

1

La méthode de restauration est appelée lorsque quelque chose échoue pendant votre processus d'installation. L'annulation manuelle de l'installation ne compte pas. Par exemple, vous pouvez avoir des conditions requises, vérifier la version du framework appropriée ou vérifier l'existence d'un fichier, puis lancer un InstallException. Jetez un oeil sur le lien et vous pouvez voir quelques exemples. Vous voudriez gérer toutes les autres exceptions dans votre Rollback.

À des fins de test, vous pouvez forcer l'échec. Lancez simplement l'exception dans l'une de vos méthodes, telle que la méthode d'installation. Ajouter cette ligne:

throw new InstallException(); 
// or 
throw new InstallException("Some error message here"); 

La méthode Rollback devrait alors être appelée.

+0

Merci pour le commentaire, j'ai planté une exception dans l'événement d'installation et la restauration n'a toujours pas été appelée. – user88637

+0

@ yossi1981: et, bien sûr, vous l'avez essayé sans utiliser un try/catch correct? –

+0

Je n'ai pas utilisé d'essai/catch, l'exception est levée. Je vois même le message d'exception pendant l'installation. – user88637

0

Assurez-vous d'ajouter votre action personnalisée dans le dossier Rollback des actions personnalisées

Questions connexes