Použití informací o verzi

Instalační program má obvykle následující cíle:

  • Chcete-li umístit soubory do správného umístění.
  • Chcete-li upozornit uživatele, pokud instalační program nahrazuje existující soubor verzí, která se výrazně liší – například nahrazení souboru německého jazyka souborem anglického jazyka nebo nahrazení novějšího souboru starším souborem.

Při psaní instalačního programu musíte mít pro každý soubor následující informace:

  • Název a umístění souboru (označovaného jako zdrojový soubor).
  • Název ekvivalentního souboru na pevném disku uživatele (označovaný jako cílový soubor). Tento název je obvykle stejný jako název souboru na instalačním disku.
  • Stav sdílení souboru – to znamená, jestli je soubor soukromý pro nainstalovanou aplikaci nebo může být sdílen více aplikacemi.

Instalační program může pomocí funkce VerFindFile určit, kam se má soubor zkopírovat na disk. Tuto funkci lze také použít k určení, zda je soubor soukromý pro aplikaci nebo může být sdílen. Pokud při hledání souboru dojde k problému, VerFindFile vrátí chybovou hodnotu. Pokud například systém používá cílový soubor, VerFindFile vrátí VFF_FILEINUSE. Instalační program musí uživatele informovat o problému a reagovat na rozhodnutí uživatele pokračovat nebo ukončit instalaci.

Funkce VerInstallFile zkopíruje zdrojový soubor do dočasného souboru v adresáři určeném VerFindFile. V případě potřeby VerInstallFile soubor rozbalí pomocí funkcí v knihovně dekomprese dat.

VerInstallFile porovnává informace o verzi dočasného souboru s informacemi o verzi cílového souboru. Pokud se tyto dvě hodnoty liší, VerInstallFile vrátí jednu nebo více chybových hodnot. Vrátí například VIF_SRCOLD, pokud je dočasný soubor starší než cílový soubor, a VIF_DIFFLANG, pokud mají soubory jiné identifikátory jazyka nebo hodnoty znakové stránky. Instalační program musí uživatele informovat o problému a reagovat na rozhodnutí uživatele pokračovat nebo ukončit instalaci.

Některé chyby VerInstallFile se dají obnovit. To znamená, že instalační program může znovu použít VerInstallFile, a to s volbou VIFF_FORCEINSTALL, aby nainstaloval soubor přestože existuje konflikt verze. Pokud verInstallFile vrátí VIF_TEMPFILE a uživatel se rozhodne nevynutit instalaci, instalační program by měl dočasný soubor odstranit.

soubor VerInstallFile mohl při pokusu o vynucení instalace narazit na neopakovatelnou chybu, i když tato chyba dříve neexistovala. Soubor může například uzamknout jiný uživatel předtím, než se instalační program pokusil vynutit instalaci. Pokud se instalační program pokusí vynutit instalaci po neobnovitelné chybě, selže VerInstallFile. Instalační program musí obsahovat rutiny pro zotavení z tohoto typu chyby.

Doporučeným řešením je zobrazit dialogové okno s tlačítky Instalovat, Přeskočita Nainstalovat všechny. (Dalším řešením je dialogové okno s tlačítky Ano, Ano všem, Přeskočita Zrušit.) Tlačítko Nainstalovat vše by nemělo instalačnímu programu bránit v zobrazení výzvy uživatele k podobným chybám zahrnutím možnosti VIFF_FORCEINSTALL ve všech následných použitíchVerInstallFile . V případě neopravitelných chyb by měla být tlačítka Instalovat a Instalovat vše deaktivována.

Chcete-li uživateli zobrazit užitečnou chybovou zprávu, instalační program obvykle musí načíst informace z prostředků verze konfliktních souborů. K tomuto účelu mohou instalační program použít čtyři funkce:

GetFileVersionInfoSize vrátí velikost informací o verzi. GetFileVersionInfo používá informace načtené GetFileVersionInfoSize k načtení struktury, která obsahuje informace o verzi. VerQueryValue načte konkrétní člen z této struktury.

Pokud například VerInstallFile vrátí chybu VIF_DIFFTYPE, instalační program by měl použít GetFileVersionInfoSize, GetFileVersionInfoa VerQueryValue funkce pro dočasné a cílové soubory k získání obecného typu každého souboru. Pokud jazyky souborů koliduje, instalační program by měl také použít VerLanguageName k překladu identifikátoru binárního jazyka do textové reprezentace jazyka. (Například 0x040C se překládá jako řetězec "Francouzština".)

Pokud VerInstallFile vrátí chybu souboru, například VIF_ACCESSVIOLATION, instalační program by měl k načtení nejnovější chybové hodnoty použít funkci GetLastError. Program by měl tuto hodnotu přeložit na informativní zprávu, která se zobrazí uživateli. Program nesmí poskytovat kontrolu mezi voláními VerInstallFile a GetLastError.