Che cosa significa la funzionalità CloseApplication WiX fare e come sarebbe può l'applicazione per rispondere a tale segnale

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

Domanda

Nella configurazione WIX che ho, quando si aggiorna l'applicazione che hanno fissato l'obbligo di chiudere le applicazioni che potrebbero mantenere il file che deve essere aggiornato:

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

L'applicazione d'altra parte catturerà chiudere la finestra con un "user friendly", la finestra di dialogo in cui l'utente può confermare che lui o lei vuole chiudere l'applicazione.

Quando il programma di installazione viene eseguito CloseApplication constati che l'applicazione deve essere fermato, ma non riesce a chiudere la mia domanda. Una teoria è che la finestra di dialogo si interrompe l'applicazione dalla chiusura.

Quindi la domanda è: questo potrebbe essere un possibile problema? Se è così - come posso avere questa finestra di dialogo di conferma e ancora comportarsi correttamente quando il programma di installazione chiede l'applicazione di chiudere? Devo ascoltare i messaggi Win32 (come WM_QUIT / WM_CLOSE) o c'è un API .NET, che posso usare per rispondere adeguatamente a questi eventi?

Aggiornamento: Secondo mailinglist , CloseApplication invierà WM_CLOSE all'applicazione. Ho ancora il problema di avere un comportamento diverso se l'utente chiude l'applicazione rispetto a un messaggio inviato da vicino Wix. Non so come posso identificare le diverse fonti di come la si chiude l'applicazione.

È stato utile?

Soluzione 2

Quando il VM_CLOSE viene inviare alla mia applicazione WPF, ottengo come Jim parla di un evento di chiusura. In tal caso la chiusura faccio un controllo sulla proprietà IsFocused sulla mia classe Window. Quando questo restituisce false, ho smesso l'applicazione senza alcuna conferma da parte dell'utente.

Altri suggerimenti

L'applicazione dovrebbe ottenere un WM_CLOSE che dovrebbe emergere nella vostra App NET come un evento di "chiusura" sul modulo principale. Nel trattamento che, è possibile utilizzare l'API Win32 GetLastActivePopup per verificare eventuali attiva le finestre di dialogo che hai aperto e vicino loro come appropriato.

È possibile verificare l'implementazione aprendo task manager e facendo un "Termina processo" sulla vostra applicazione. Che cercherà di fare un arresto dolce prima utilizzando un metodo simile a quello che Wix è probabilmente facendo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top