Veritabanı ve Düzeltme Eki Örneği
Bir uygulama, yeni veya mevcut bir yükleme veritabanını (.msi dosyası) veya düzeltme eki paketini (.msp dosyası) açmak için MsiOpenDatabase işlevini kullanabilir. Uygulama, veritabanı tanıtıcısını kullanmadan önce MsiOpenDatabase dönüş değerini denetler.
Aşağıdaki örneklerde, msi.h dosyasında tanımlanan PMSIHANDLE türü değişkenleri kullanılır. PMSIHANDLE türünün kullanılması önerilir çünkü yükleyici kapsamın dışına çıktıkça PMSIHANDLE nesnelerini kapatırken uygulamanızın MsiCloseHandleçağırarak MSIHANDLE nesnelerini kapatması gerekir. Daha fazla bilgi için Windows Installer En İyi Yöntemleriiçindeki HANDLE yerine PMSIHANDLE kullanma bölümüne bakın.
Aşağıdaki örnek, yalnızca okumak için sample.msibir veritabanı açar. MsiOpenDatabase yalnızca c:\test dizininde sample.msi varsa başarılı olur. Başarılı olduğunda, döndürülen veritabanı tanıtıcısı MsiDatabaseOpenView ve MsiGetSummaryInformationkullanılarak yükleme paketindeki verileri sorgulamak için kullanılabilir.
PMSIHANDLE hDbReadOnly = 0;
UINT uiStatus1 = MsiOpenDatabase(TEXT("c:\\test\\sample.msi"), MSIDBOPEN_READONLY, &hDbReadOnly);
if (ERROR_SUCCESS != uiStatus1)
{
// process error
return uiStatus1;
}
Aşağıdaki örnek, veritabanını okuma ve yazma için açar. Uygulama MsiDatabaseCommitçağırırsa, veritabanında yapılan tüm değişiklikler kaydedilir. Uygulama MsiDatabaseCommit çağırmazsa veritabanında hiçbir değişiklik yapılmaz.
PMSIHANDLE hDbTransact = 0;
UINT uiStatus2 = MsiOpenDatabase(TEXT("c:\\test\\example.msi"), MSIDBOPEN_TRANSACT, &hDbTransact);
if (ERROR_SUCCESS != uiStatus2)
{
// process error
return uiStatus2;
}
Aşağıdaki örnek, text.msimevcut bir veritabanını alır ve newtest.msiyeni bir veritabanı oluşturur. Yapılan tüm değişiklikler MsiDatabaseCommitçağrılarak yeni veritabanına kaydedilebilir. szDatabasePath parametresinde belirtilen mevcut veritabanı değiştirilmez.
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;
}
Aşağıdaki örnek, yalnızca okumak için bir Windows Installer düzeltme eki paketi (.msp dosyası) açar. Döndürülen düzeltme eki tutamacı, _Streams ve _Storages tablolarındaki sorgular tarafından düzeltme eki paketine dahil edilen dolapları belirlemek ve alt fırtınaları dönüştürmek için kullanılabilir.
Windows Installer 2.0: Desteklenmiyor. Windows Installer 3.0 sürümünden başlayarak uygulama, yeni düzeltme eki sıralama bilgilerini kullanan bir düzeltme eki paketinde MsiPatchSequence tablosunu sorgulayabilir.
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;
}