Uso delle informazioni sulla versione
Un programma di installazione ha in genere gli obiettivi seguenti:
- Per inserire i file nel percorso corretto.
- Per notificare all'utente se il programma di installazione sostituisce un file esistente con una versione significativamente diversa, ad esempio sostituendo un file in lingua tedesca con un file in lingua inglese o sostituendo un file più recente con un file precedente.
Quando si scrive il programma di installazione, è necessario disporre delle informazioni seguenti per ogni file:
- Nome e percorso del file (denominato file di origine).
- Nome del file equivalente sul disco rigido dell'utente (denominato file di destinazione). Questo nome è in genere lo stesso del nome del file nel disco di installazione.
- Lo stato di condivisione del file, ovvero se il file è privato dell'applicazione installata o può essere condivisa da più applicazioni.
Il programma di installazione può usare la funzione VerFindFile per determinare dove deve essere copiato il file sul disco. Questa funzione può essere usata anche per specificare se il file è privato dell'applicazione o può essere condiviso. Se si verifica un problema nel trovare il file, VerFindFile restituisce un valore di errore. Ad esempio, se il sistema usa il file di destinazione, VerFindFile restituisce VFF_FILEINUSE. Il programma di installazione deve informare l'utente del problema e rispondere alla decisione dell'utente di continuare o terminare l'installazione.
La funzione VerInstallFile copia il file di origine in un file temporaneo nella directory specificata da VerFindFile. Se necessario, VerInstallFile espande il file usando le funzioni nella libreria di decompressione dei dati.
VerInstallFile confronta le informazioni sulla versione del file temporaneo con quella del file di destinazione. Se le due sono diverse, VerInstallFile restituisce uno o più valori di errore. Ad esempio, restituisce VIF_SRCOLD se il file temporaneo è precedente al file di destinazione e VIF_DIFFLANG se i file hanno identificatori di lingua diversi o valori della tabella codici. Il programma di installazione deve informare l'utente del problema e rispondere alla decisione dell'utente di continuare o terminare l'installazione.
Alcuni errori di VerInstallFile sono recuperabili. Vale a dire, il programma di installazione può chiamare di nuovo VerInstallFile , specificando l'opzione VIFF_FORCEINSTALL , per installare il file indipendentemente dal conflitto di versione. Se VerInstallFile restituisce VIF_TEMPFILE e l'utente sceglie di non forzare l'installazione, il programma di installazione deve eliminare il file temporaneo.
VerInstallFile potrebbe riscontrare un errore non recuperabile durante il tentativo di forzare l'installazione, anche se l'errore non esiste in precedenza. Ad esempio, il file potrebbe essere bloccato da un altro utente prima che il programma di installazione tentasse di forzare l'installazione. Se un programma di installazione tenta di forzare l'installazione dopo un errore non recuperabile, VerInstallFile ha esito negativo. Il programma di installazione deve contenere routine da ripristinare da questo tipo di errore.
La soluzione consigliata consiste nel visualizzare una finestra di dialogo con i pulsanti Installa, Ignora e Installa tutto. Un'altra soluzione è una finestra di dialogo con i pulsanti Sì, Sì a Tutti, Ignora e Annulla. Il pulsante Installa tutto deve impedire al programma di installazione di richiedere all'utente errori simili includendo l'opzione VIFF_FORCEINSTALL in tutti gli usi successivi di VerInstallFile. Per gli errori non recuperabili, i pulsanti Installa e Installa tutti devono essere disabilitati.
Per visualizzare un messaggio di errore utile all'utente, il programma di installazione in genere deve recuperare informazioni dalle risorse della versione dei file in conflitto. Per questo scopo, il programma di installazione può usare quattro funzioni:
GetFileVersionInfoSize restituisce le dimensioni delle informazioni sulla versione. GetFileVersionInfo usa le informazioni recuperate da GetFileVersionInfoSize per recuperare una struttura contenente le informazioni sulla versione. VerQueryValue recupera un membro specifico da tale struttura.
Ad esempio, se VerInstallFile restituisce l'errore VIF_DIFFTYPE, il programma di installazione deve usare le funzioni GetFileVersionInfoSize, GetFileVersionInfo e VerQueryValue nei file temporanei e di destinazione per ottenere il tipo generale di ogni file. Se le lingue dei file sono in conflitto, il programma di installazione deve usare anche VerLanguageName per tradurre l'identificatore del linguaggio binario in una rappresentazione di testo della lingua. Ad esempio, 0x040C si traduce nella stringa "francese".
Se VerInstallFile restituisce un errore di file, ad esempio VIF_ACCESSVIOLATION, il programma di installazione deve usare la funzione GetLastError per recuperare il valore di errore più recente. Il programma deve tradurre questo valore in un messaggio informativo da visualizzare all'utente. Il programma non deve restituire il controllo tra le chiamate a VerInstallFile e GetLastError.