Contoh Database dan Patch
Aplikasi dapat menggunakan fungsi MsiOpenDatabase untuk membuka database penginstalan baru atau yang sudah ada (file .msi) atau paket patch (file.msp.) Aplikasi memeriksa nilai pengembalian MsiOpenDatabase sebelum menggunakan handel database.
Contoh berikut menggunakan variabel jenis PMSIHANDLE yang ditentukan dalam msi.h. Disarankan untuk menggunakan jenis PMSIHANDLE karena alat penginstal menutup objek PMSIHANDLE saat keluar dari cakupan, sedangkan aplikasi Anda harus menutup objek MSIHANDLE dengan memanggil MsiCloseHandle. Untuk informasi selengkapnya lihat Menggunakan PMSIHANDLE alih-alih bagian HANDLE di Praktik Terbaik Penginstal Windows.
Contoh berikut membuka database, sample.msi, untuk dibaca saja. MsiOpenDatabase hanya berhasil jika sample.msi ada di direktori c:\test. Setelah berhasil, handel database yang dikembalikan dapat digunakan untuk mengkueri data dalam paket penginstalan menggunakan MsiDatabaseOpenView dan MsiGetSummaryInformation.
PMSIHANDLE hDbReadOnly = 0;
UINT uiStatus1 = MsiOpenDatabase(TEXT("c:\\test\\sample.msi"), MSIDBOPEN_READONLY, &hDbReadOnly);
if (ERROR_SUCCESS != uiStatus1)
{
// process error
return uiStatus1;
}
Contoh berikut membuka database untuk membaca dan menulis. Jika aplikasi memanggil MsiDatabaseCommit, semua perubahan yang dilakukan pada database disimpan. Jika aplikasi tidak memanggil MsiDatabaseCommit, tidak ada perubahan yang dilakukan pada database.
PMSIHANDLE hDbTransact = 0;
UINT uiStatus2 = MsiOpenDatabase(TEXT("c:\\test\\example.msi"), MSIDBOPEN_TRANSACT, &hDbTransact);
if (ERROR_SUCCESS != uiStatus2)
{
// process error
return uiStatus2;
}
Contoh berikut mengambil database, text.msi, dan membuat database baru, newtest.msi. Setiap perubahan yang dibuat dapat disimpan di database baru dengan memanggil MsiDatabaseCommit. Database yang ada yang ditentukan dalam parameter szDatabasePath tidak berubah.
PMSIHANDLE hDbOutput = 0;
UINT uiStatus3 = MsiOpenDatabase(TEXT("c:\\test\\test.msi"), TEXT("c:\\test\\newtest.msi"), &hDbOutput);
if (ERROR_SUCCESS != uiStatus3)
{
// process error
return uiStatus3;
}
Contoh berikut membuka paket patch Pemasang Windows (file.msp) untuk dibaca saja. Handel patch yang dikembalikan dapat digunakan untuk menentukan lemari dan mengubah substorase yang disertakan dalam paket patch berdasarkan kueri pada tabel _Streams dan _Storages .
Windows Installer 2.0: Tidak didukung. Dimulai dengan Pemasang Windows 3.0, aplikasi dapat mengkueri tabel MsiPatchSequence yang ada dalam paket patch yang menggunakan informasi urutan patch baru.
PMSIHANDLE hDbPatch = 0;
LPCTSTR szPersistMode = MSIDBOPEN_READONLY + MSIDBOPEN_PATCHFILE;
UINT uiStatus4 = MsiOpenDatabase(TEXT("c:\\test\\sample.msp"), szPersistMode, &hDbPatch);
if (ERROR_SUCCESS != uiStatus4)
{
// process error
return uiStatus4;
}