Windows Confidential Windows È ma Won’t

Raymond Chen

Windows effettivamente possibile sostituire una DLL che è in uso, ridenominazione originale e copiare il nuovo file in una posizione. Tuttavia, il mondo Windows preferisce non eseguire questa operazione. Perché?

Anche se si sostituisce un file in uso, è comunque possibile codice del sistema che desideri utilizzare la versione precedente. Si supponga, ad esempio, di che avere due file, A.DLL e b.dll., lavorare insieme. Si emette una patch che aggiorna entrambi i file, ma A.DLL è in uso. Nessun problema. È sufficiente sostituire di essi. Di conseguenza, i programmi che sono stati ancora A.DLL mantenere utilizzando la versione precedente, ma nuovi programmi saranno quello nuovo. E tutti i programmi di ottenere la nuova versione di b.dll..

Ora un programma che utilizzava A.DLL precedente si decide di chiamare una funzione in. Naturalmente prevede la versione precedente di b.dll., ma invece viene ottenuta la nuova versione. In base alle quali l'ordinamento della modifica apportata a b.dll., potrebbe funzionare questa chiamata, o potrebbe arresto. Due DLL si presuppone che il partner proviene dallo stesso insieme corrispondente.

Anche se si sta aggiornando solo una singola DLL con nessun dipendenze, esistono ancora problemi poiché è la DLL interagire con le versioni precedenti di stesso .

Si supponga che si sostituisce ole32.dll mentre è in uso. Quindi un nuovo programma chiama in ole32.dll nuovo e avvia un'operazione di trascinamento. L'utente trascina l'oggetto su una finestra creata da uno dei programmi che ha avviato prima l'aggiornamento. È ora possibile ole32.dll il nuovo invio di messaggi a ole32.dll precedente.

Quando si scrive codice di comunicazione tra processi, in genere previsto che la stessa versione del codice verrà uso sia in ogni processo, poiché i due endpoint nel canale di comunicazione è necessario concordano sul modo in cui si desidera comunicare. " Verrà per l'invio messaggio 5, ovvero 'testo richiesta' e previsto è possibile rispondere inviando mi messaggio 12, che significa "qui è il testo richiesto'." Se i due lati non sono in esecuzione la stessa versione del codice, c'è una possibilità che il meccanismo di comunicazione sarà diverso, potrebbe essere sottile, ma può, infatti, causare un'incompatibilità.

Si supponga aggiunto un campo a una struttura e che si verifica struttura da utilizzare come parte del messaggio 5. Bene, perfettamente. Si avrà due versioni incompatibili del messaggio 5 esiste ora, uno che utilizza la struttura precedente e uno che utilizza la nuova struttura. Se i due lati di comunicazione disaccordo sulla struttura, messaggio di 5 non funzionerà.

Si prevede di supportare in esecuzione le versioni precedenti e nuovi affiancata da, quindi è necessario inventare un nuovo messaggio, ad esempio, 52 messaggio e di disporre della nuova versione della DLL supporti entrambi messaggio 5 e 52 del messaggio. Deve stabilire quale versione della DLL in esecuzione su altro lato prima e inviarlo il messaggio appropriato.

Potrebbe anche se si non modificato la struttura stessa, essere stato modificato il significato di alcuni campi nella struttura. Se la struttura è un'enumerazione e la nuova versione aggiunge un nuovo valore a tale enumerazione, ecco ancora un'incompatibilità tra la precedente e nuovo.

Certo, puoi provare a definire i nuovi messaggi ogni volta che emettere una patch e scrivere il codice per supportare l'interoperabilità tra le versioni vecchi e nuove durante la finestra in cui due versioni in conflitto della DLL sono in esecuzione nello stesso momento. Questo, tuttavia, possibile ottenere difficoltoso quando si le patch terza ed è disponibile quattro insiemi diversi di messaggi, uno per la versione originale e uno per ciascuno delle patch.

Anche se è necessario che sia necessario installare le patch in sequenza, non risparmiare qualsiasi sforzo, purché consentire nel programma originale mantenere in esecuzione, è necessario continuare l'interoperabilità con esso.

E gli utenti scrivere articoli lamentano che si un idiot perché si è troppo lenta emettere le patch.

In modo da renderlo non da Windows è necessario riavviare dopo la sostituzione di un file in uso. È sufficiente che è necessario invece non affrontare la complessità derivante in caso contrario. Progettazione è un insieme di compromessi. Si si raggiunge l'impegno di supportare le versioni precedenti di se stessi per una situazione che non è una configurazione stato stabile consigliata anche?

Raymond Chen Sito Web, la cosa nuovo precedente e il suo libro identico intitolato riguardano storia di Windows e la programmazione Win32. Desidera una posizione iniziale viaggio sicuro.