Menggunakan Informasi Versi
Program penginstalan biasanya memiliki tujuan berikut:
- Untuk menempatkan file di lokasi yang benar.
- Untuk memberi tahu pengguna jika program penginstalan mengganti file yang ada dengan versi yang secara signifikan berbeda—misalnya, mengganti file berbahasa Jerman dengan file berbahasa Inggris, atau mengganti file yang lebih baru dengan file yang lebih lama.
Saat menulis program penginstalan, Anda harus memiliki informasi berikut untuk setiap file:
- Nama dan lokasi file (disebut sebagai file sumber).
- Nama file yang setara pada hard disk pengguna (disebut sebagai file tujuan). Nama ini biasanya sama dengan nama file pada disk penginstalan.
- Status berbagi file—yaitu, apakah file bersifat privat ke aplikasi yang diinstal atau dapat dibagikan oleh beberapa aplikasi.
Program penginstalan dapat menggunakan fungsi VerFindFile untuk menentukan di mana file harus disalin pada disk. Fungsi ini juga dapat digunakan untuk menentukan apakah file bersifat privat ke aplikasi atau dapat dibagikan. Jika terjadi masalah dalam menemukan file, VerFindFile mengembalikan nilai kesalahan. Misalnya, jika sistem menggunakan file tujuan, VerFindFile mengembalikan VFF_FILEINUSE. Program penginstalan harus memberi tahu pengguna tentang masalah dan menanggapi keputusan pengguna untuk melanjutkan atau mengakhiri penginstalan.
Fungsi VerInstallFile menyalin file sumber ke file sementara di direktori yang ditentukan oleh VerFindFile. Jika perlu, VerInstallFile memperluas file dengan menggunakan fungsi di pustaka dekompresi data.
VerInstallFile membandingkan informasi versi file sementara dengan file tujuan. Jika keduanya berbeda, VerInstallFile mengembalikan satu atau beberapa nilai kesalahan. Misalnya, mengembalikan VIF_SRCOLD jika file sementara lebih lama dari file tujuan dan VIF_DIFFLANG jika file memiliki pengidentifikasi bahasa atau nilai halaman kode yang berbeda. Program penginstalan harus memberi tahu pengguna tentang masalah dan menanggapi keputusan pengguna untuk melanjutkan atau mengakhiri penginstalan.
Beberapa kesalahan VerInstallFile dapat dipulihkan. Artinya, program penginstalan dapat memanggil VerInstallFile lagi, menentukan opsi VIFF_FORCEINSTALL , untuk menginstal file terlepas dari konflik versi. Jika VerInstallFile mengembalikan VIF_TEMPFILE dan pengguna memilih untuk tidak memaksa penginstalan, program penginstalan harus menghapus file sementara.
VerInstallFile dapat mengalami kesalahan yang tidak dapat dipulihkan saat mencoba memaksa penginstalan, meskipun kesalahan tidak ada sebelumnya. Misalnya, file dapat dikunci oleh pengguna lain sebelum program penginstalan mencoba memaksa penginstalan. Jika program penginstalan mencoba memaksa penginstalan setelah kesalahan yang tidak dapat dipulihkan, VerInstallFile gagal. Program penginstalan harus berisi rutinitas untuk pulih dari jenis kesalahan ini.
Solusi yang disarankan adalah menampilkan kotak dialog dengan tombol Instal, Lewati, dan Instal Semua. (Solusi lain adalah kotak dialog dengan tombol Ya, Ya untuk Semua, Lewati, dan Batal.) Tombol Instal Semua harus mencegah program penginstalan meminta pengguna tentang kesalahan serupa dengan menyertakan opsi VIFF_FORCEINSTALL di semua penggunaan VerInstallFile berikutnya. Untuk kesalahan yang tidak dapat dipulihkan, tombol Instal dan Instal Semua harus dinonaktifkan.
Untuk menampilkan pesan kesalahan yang berguna kepada pengguna, program penginstalan biasanya harus mengambil informasi dari sumber daya versi file yang berkonflik. Ada empat fungsi yang dapat digunakan program penginstalan untuk tujuan ini:
GetFileVersionInfoSize mengembalikan ukuran informasi versi. GetFileVersionInfo menggunakan informasi yang diambil oleh GetFileVersionInfoSize untuk mengambil struktur yang berisi informasi versi. VerQueryValue mengambil anggota tertentu dari struktur tersebut.
Misalnya, jika VerInstallFile mengembalikan kesalahan VIF_DIFFTYPE , program penginstalan harus menggunakan fungsi GetFileVersionInfoSize, GetFileVersionInfo, dan VerQueryValue pada file sementara dan tujuan untuk mendapatkan jenis umum setiap file. Jika bahasa file berkonflik, program penginstalan juga harus menggunakan VerLanguageName untuk menerjemahkan pengidentifikasi bahasa biner ke dalam representasi teks bahasa. (Misalnya, 0x040C diterjemahkan ke string "Prancis.")
Jika VerInstallFile mengembalikan kesalahan file, seperti VIF_ACCESSVIOLATION, program penginstalan harus menggunakan fungsi GetLastError untuk mengambil nilai kesalahan terbaru. Program harus menerjemahkan nilai ini ke dalam pesan informatif untuk ditampilkan kepada pengguna. Program ini tidak boleh menghasilkan kontrol antara panggilan ke VerInstallFile dan GetLastError.