In Windows almeno un'applicazione in esecuzione sta chiudendo il proprio file exe e tutti i file .dll collegati staticamente. Ciò impedisce ad un'applicazione di aggiornarsi direttamente, ai lead se desidera impedire un riavvio (se il riavvio è OK l'app può passare nel flag MOVEFILE_DELAY_UNTIL_REBOOT
su MoveFileEx ed è libera di "sovrascrivere" il proprio file .exe, come è in ritardo comunque). Questo è il motivo per cui in genere le applicazioni non controllano gli aggiornamenti sul proprio .exe, ma avviano uno shim che controlla gli aggiornamenti e quindi avvia l'applicazione 'reale'. Infatti lo 'shim' può essere fatto anche dal sistema operativo stesso, in virtù di un file manifest correttamente configurato. L'applicazione sviluppata da Visual Studio ottiene questo come uno strumento prefabbricato di pacchetto guidato, vedere ClickOnce Deployment for Visual C++ Applications.
L'app di Linux tipica non si aggiorna automaticamente a causa delle molte numerose varianti del sistema operativo. La maggior parte delle app è distribuita come sorgente, viene eseguita tramite alcune versioni di auto-hell per autoconfigurarsi e costruirsi, quindi installarsi tramite make install
(tutte queste possono essere automatizzate dietro un pacchetto). Anche le app distribuite come file binari per un determinato tipo di Linux non si copiano da sole, ma installano la nuova versione side-by-side e aggiornano uno symbolic link
per "attivare" la nuova versione (di nuovo, una gestione dei pacchetti il software può nascondere questo).
Le app OS X si inseriscono nel bucket di Linux se sono del tipo Posix o al giorno d'oggi cadono nell'app del Mac AppStore che gestisce gli aggiornamenti.
vorrei giorno in cui posizionare il proprio auto-update non raggiungerà mai la raffinatezza di una di queste tecnologie (ClickOnce, RPM, AppStore) e offrire all'utente il comportamento previsto vis-a-vis la scoperta, l'aggiornamento e la disinstallazione. Vorrei andare con il flusso e utilizzare queste tecnologie nelle rispettive piattaforme.
fonte
2012-02-06 16:17:24
Per quanto ne so, Windows non consente di sovrascrivere un file EXE mentre il programma è in esecuzione. Questa è una delle cose più fastidiose di Windows, imo. – unwind
Come ti ho detto su quell'altra domanda, non puoi sovrascrivere un exe in esecuzione. Ho anche dato istruzioni passo passo su come eseguire l'intero processo. –
@MooingDuck lo so! Sto ancora riferendo la tua risposta come un progetto di alto livello. Sto semplicemente restringendo lo scopo di questa particolare domanda. Già, sono abbastanza soddisfatto delle risposte. – TheBuzzSaw