Domanda

Qual è il modo migliore per terminare un programma e quindi eseguire codice aggiuntivo dal programma che viene terminato?Ad esempio, quale sarebbe il modo migliore per un programma di aggiornarsi automaticamente?

È stato utile?

Soluzione

Hai un paio di opzioni:

È possibile utilizzare un'altra applicazione .exe per eseguire l'aggiornamento automatico.Questo è probabilmente il metodo migliore.

Puoi anche rinominare l'exe di un programma mentre è in esecuzione.Permettendoti quindi di ottenere il file da alcuni server di aggiornamento e sostituirlo.Al successivo avvio del programma verrà utilizzato il nuovo .exe.È quindi possibile eliminare il file rinominato all'avvio.

Altri suggerimenti

Lo sarebbe Veramente utile sapere di che lingua stiamo parlando qui.Sono sicuro di poterti dare alcuni ottimi consigli per farlo in PowerBuilder o Cobol, ma potrebbe non essere proprio quello che stai cercando!Se stai parlando di Java, tuttavia, potresti utilizzare un hook di spegnimento: per me funziona benissimo.

Un'altra cosa da considerare è che la maggior parte delle app "principali" che ho utilizzato (FileZilla, Paint.NET, ecc.) fanno sì che gli aggiornamenti disinstallino la versione precedente dell'app e quindi eseguano una nuova installazione della nuova versione dell'applicazione.

Capisco che questo non funzionerà per applicazioni molto grandi, ma sembra essere un processo "preferito" per le applicazioni di piccole e medie dimensioni.

Non conosco un modo per farlo senza un secondo programma che il programma principale avvia prima dello spegnimento.Il programma 2 scarica e installa le modifiche, quindi riavvia il programma principale.

Abbiamo fatto qualcosa di simile nella nostra app precedente.Abbiamo catturato la chiusura del programma (in .NET 2.0) dalla X o dal pulsante di chiusura, quindi abbiamo avviato un processo di aggiornamento in background che l'utente non ha visto.Verificherebbe la presenza di un aggiornamento sul server (app client-server) e, se ce n'era uno disponibile, lo scaricherebbe in background utilizzando BITS.Quindi, alla successiva apertura dell'applicazione, si renderebbe conto che c'era una nuova versione (abbiamo impostato un flag) e apparirà un messaggio che avvisa l'utente della nuova versione e un pulsante su cui fare clic se desidera visualizzare le nuove funzionalità aggiunte a questa versione.

Rende tutto più semplice se disponi di un'app secondaria che viene eseguita per eseguire gli aggiornamenti.Dovresti eseguire l'app "aggiornamento" e quindi attendere al suo interno l'uscita dell'altro processo.Se è necessario accedere alle normali DLL delle app e simili ma è necessario aggiornarle, è possibile eseguire il programma di aggiornamento da una posizione secondaria con DLL già aggiornate in modo che non siano in uso nella posizione originale.

Se stai utilizzando la scrittura di un'applicazione .NET, potresti prendere in considerazione l'utilizzo di ClickOnce.Se hai bisogno di un po' di personalizzazione, potresti cercare altrove.

Abbiamo un processo esterno che esegue l'aggiornamento per noi.Quando trova un aggiornamento, lo scarica in una cartella secondaria e quindi attende la chiusura dell'applicazione principale.All'uscita, sostituisce tutti i file correnti.Il processo primario avvia semplicemente il processo di aggiornamento ogni 4 ore.Poiché il processo di aggiornamento attenderà l'uscita dell'app primaria, l'app primaria non dovrà eseguire alcuna elaborazione speciale oltre all'avvio dell'applicazione di aggiornamento.

Questo è un problema secondario, ma se stai pensando di scrivere il tuo processo di aggiornamento, ti incoraggio a considerare l'utilizzo di una compressione di qualche tipo per (1) salvare durante il download e (2) fornire un file da estrarre da un server di aggiornamento .

Spero che abbia senso!

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