2010-11-28 11 views
3

Ich habe OnBeforeUninstall übersteuert, um zu verhindern, dass das Setup-Projekt meiner Anwendung es unter bestimmten Umständen deinstalliert, aber es scheint, dass es gerade nicht aufgerufen wird und keine Wirkung hat.Verhindern der Deinstallation im Setup-Projekt mit OnBeforeUninstall

protected override void OnBeforeUninstall(IDictionary savedState) 
{ 
    if (ApplicationIsBusy()) 
     throw new ApplicationException("Prevent uninstall while application busy."); 
} 

Ich bin in der Lage Deinstallation abbrechen, indem Sie die Uninstall Methode überschrieben, aber dann hat sich das Setup-Projekt bereits geschlossen meiner Anwendung. Wie kann ich einen Deinstallationsversuch "fehlschlagen", wenn meine Anwendung beschäftigt ist vor das Setup-Projekt versucht, es zu schließen, wenn es ausgeführt wird und unterbricht meinen Arbeitsprozess?

+1

Versuchen Sie eine Trace-Nachricht in dort zu schreiben: http://msdn.microsoft.com/en-us/library/system.diagnostics.trace.writeline.aspx nur um zu überprüfen, ob die Methode aufgerufen wird oder nicht. Sie können die Ablaufverfolgungsmeldungen mit debugView überprüfen http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx –

+1

Auch von MSDN: "Wenn Sie OnBeforeUninstall in einer abgeleiteten Klasse überschreiben, müssen Sie unbedingt die OnBeforeUninstall-Methode der Basisklasse aufrufen damit registrierte Teilnehmer die Veranstaltung erhalten. " –

Antwort

2

Bevor Sie Ihren benutzerdefinierten Code aufrufen, rufen Sie die Datei base.OnBeforeUninstall (savedState) auf, damit registrierte Delegierte das Ereignis empfangen, damit der benutzerdefinierte Code vor der Deinstallation ausgeführt werden kann.

protected override void OnBeforeUninstall(IDictionary savedState) 
{ 
    // Add this 
    base.OnBeforeUninstall(savedState); 

    if (ApplicationIsBusy()) 
     throw new ApplicationException("Prevent uninstall while application busy."); 
} 
3

Vergewissern Sie sich, dass Sie in das Setup-Projekt für die Deinstallation der benutzerdefinierten Aktion gewählt haben, dass ist wahrscheinlich Ihren Fall.