Was macht Wix 'CloseApplication -Funktionalität und wie kann die Anwendung auf ein solches Signal reagieren?

StackOverflow https://stackoverflow.com/questions/3008250

Frage

In dem Wix -Setup, den ich habe, habe ich beim Upgrade der Anwendung die Anforderung festgelegt, Anwendungen zu schließen, die möglicherweise an Dateien festgehalten werden, die aktualisiert werden müssen:

<util:CloseApplication
    Id="CloseMyApp" 
    Target="[MyAppExe]"
    CloseMessage="yes"
    Description="!(loc.MyAppStillRunning)"
    RebootPrompt="no"
    ElevatedCloseMessage="no"
/>

Die Anwendung dagegen wird das Schließen des Fensters mit einem "benutzerfreundlichen" Dialogfeld erfassen, in dem der Benutzer bestätigen kann, dass er die Anwendung schließen möchte.

Wenn das Installateur die CloseApplication ausführt, wird festgestellt, dass die Anwendung gestoppt werden muss, aber meine Anwendung nicht schließt. Eine Theorie ist, dass das Dialogfeld die Anwendung zum Schließen verhindern.

Die Frage ist also: Könnte dies ein mögliches Problem sein? Wenn ja - wie kann ich dieses Bestätigungsdialogfeld haben und verhalten mich trotzdem ordnungsgemäß, wenn der Installateur die Anwendung zum Schließen auffordert? Muss ich Win32 -Nachrichten anhören (wie WM_QUIT/WM_CLOSE) oder gibt es eine .NET -API, mit der ich auf diese Ereignisse ordnungsgemäß reagieren kann?

Aktualisieren: Entsprechend Mailingliste, Die CloseApplication sendet WM_CLOSE an die Anwendung. Ich habe immer noch das Problem, ein anderes Verhalten zu haben, wenn der Benutzer die App im Vergleich zu einer von Wix gesendeten Meldung schließt. Ich bin mir nicht sicher, wie ich verschiedene Quellen für die Schließung der Anwendung identifizieren kann.

War es hilfreich?

Lösung 2

Wenn die VM_CLOSE an meine WPF -Anwendung gesendet wird, erwähnt ich, wie Jim ein Schlussereignis erwähnt. Bei dieser Schließung prüfe ich die isfokussierte Eigenschaft in meiner Fensterklasse. Wenn dies falsch zurückgibt, kündige ich die Anwendung ohne Benutzerbestätigung.

Andere Tipps

Ihre Anwendung sollte ein WM_CLOSE erhalten, das in Ihrer .NET -App als "Schließereignis" in Ihrem Hauptformular auftauchen soll. Bei der Verarbeitung können Sie die Win32 -API verwenden GetLastactivePopup Um alle aktiven Dialogfelder zu überprüfen, die Sie geöffnet haben, und sie entsprechend schließen.

Sie können Ihre Implementierung testen, indem Sie Task -Manager öffnen und einen "Endprozess" für Ihre Anwendung durchführen. Das wird versuchen, zuerst eine sanfte Abschaltung mit einer Methode zu machen, die dem wahrscheinlich ist, was Wix wahrscheinlich tut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top