Windows ConfidentialCondivisioni e simili

Raymond Chen

Ti sei mai chiesto perché durante la disinstallazione di un programma, in Windows® viene visualizzato un messaggio in cui si chiede conferma dell'eliminazione di un file che potrebbe impedire la corretta esecuzione di altre applicazioni? Innanzitutto, il messaggio non viene visualizzato dal sistema operativo Windows ma dal programma di disinstallazione. La domanda corretta, pertanto, è: "Perché nel programma di disinstallazione viene visualizzata questa finestra di dialogo"? Si tratta di un esempio eccellente di domanda a cui nessun utente sa rispondere. Cosa ha condotto a una situazione di questo tipo?

Per gestire i conteggi dei riferimenti ai file utilizzati da più applicazioni, come le librerie di runtime MFC, che vengono utilizzate da più programmi non correlati, nel programma di installazione viene creata una voce sotto la chiave del Registro di sistema SharedDLLs. In questa voce vengono elencati il file e il relativo conteggio dei riferimenti. Se è già presente una voce per il file, il conteggio dei riferimenti verrà incrementato. Se non è ancora presente una voce, il conteggio dei riferimenti verrà impostato su uno. Viceversa, quando il programma viene disinstallato, il conteggio dei riferimenti viene decrementato e, quando risulta pari a 0, il file viene eliminato, poiché non è più utilizzato da alcun programma. Questa è almeno la teoria.

Il file si deve eliminare?

Il file si deve eliminare?  (Fare clic sull'immagine per ingrandirla)

Un problema serio di questo modello è che presuppone che tutti accettino di giocare secondo le regole. Ma la tentazione di "barare" è enorme, dal momento che le conseguenze non penalizzano, in genere, l'autore dell'inganno.

Si supponga, ad esempio, che le librerie di runtime MFC utilizzate da un programma vengano copiate dal programma di installazione nella directory di sistema senza aggiornare il conteggio dei riferimenti. In seguito, quando il programma viene disinstallato, le librerie vengono semplicemente eliminate. Ora si consideri la situazione che si verifica quando il suddetto programma tenta di coesistere con un programma che segue le regole. Di seguito viene riportata una serie di eventi di base:

  1. Installazione del programma buono: le librerie vengono installate e il conteggio dei riferimenti viene impostato su 1.
  2. Installazione del programma cattivo: le librerie vengono installate, ma il conteggio dei riferimenti non viene modificato.
  3. Disinstallazione del programma cattivo: le librerie vengono eliminate.

Il risultato di questi eventi è che, a causa dell'eliminazione delle librerie, il programma buono smette di funzionare.

Ecco un altro scenario:

  1. Installazione del programma buono: le librerie vengono installate e il conteggio dei riferimenti viene impostato su 1.
  2. Installazione del programma cattivo: le librerie vengono installate, ma il conteggio dei riferimenti non viene modificato.
  3. Disinstallazione del programma cattivo: il conteggio dei riferimenti è pari a zero e le librerie vengono eliminate.

Il risultato di questo scenario è che il programma cattivo smette di funzionare.

Gli autori del programma buono hanno pensato: "Non riusciamo a impedire al programma cattivo di interferire con le nostre attività, ma possiamo almeno tentare di evitare di interferire noi con il programma cattivo". Quindi, quando è necessario eliminare un file, viene visualizzato un messaggio con cui si richiede all'utente di confermare l'eliminazione del file. Se esiste un programma cattivo che utilizza il file, questo smetterà di funzionare. Dunque, se esiste un programma cattivo, è opportuno specificare di non eliminare il file. Tutti gli utenti sanno qual è la finestra di dialogo a cui mi riferisco. Persino il leggendario Jeffrey Richter ha consigliato questo approccio in un articolo del Microsoft Systems Journal nel 1996.

Purtroppo, l'esecuzione di questa operazione comporta la visualizzazione di un messaggio con una domanda a cui nessun utente saprà dare una risposta corretta

Naturalmente, tutti i "fanatici del controllo" che richiedono che Windows consenta di ignorare l'ultima operazione eseguita dovrebbero accogliere con entusiasmo questa finestra di dialogo. I programmi di disinstallazione offrono un controllo file per file sull'intero processo di disinstallazione. Attenzione quindi a ciò che si chiede... perché si potrebbe anche ottenerlo.

Raymond Chen, The Old New Thing, così come nell'omonimo libro, vengono illustrate la storia di Windows e la programmazione in Win32. Raymond si domanda se la fusione nucleare diventerà realizzabile nel corso della sua vita.

© 2008 Microsoft Corporation e CMP Media, LLC. Tutti i diritti riservati. È vietata la riproduzione completa o parziale senza autorizzazione.