Partager via


Un exemple de base de données et de correctif

Une application peut utiliser la fonction MsiOpenDatabase pour ouvrir une base de données d’installation nouvelle ou existante (fichier .msi) ou un package de correctifs (fichier .msp.) L’application vérifie la valeur de retour de MsiOpenDatabase avant d’utiliser le handle de base de données.

Les exemples suivants utilisent les variables de type PMSIHANDLE définies dans msi.h. Il est recommandé d’utiliser le type PMSIHANDLE, car le programme d’installation ferme les objets PMSIHANDLE quand il sortent de l’étendue, tandis que votre application doit fermer les objets MSIHANDLE en appelant MsiCloseHandle. Pour plus d’informations, consultez la section Utiliser PMSIHANDLE au lieu de HANDLE dans les Bonnes pratiques de Windows Installer.

L’exemple suivant ouvre une base de données, sample.msi, en lecture seule. MsiOpenDatabase réussit seulement si sample.msi existe dans le répertoire c:\test. En cas de réussite, le handle de base de données retourné peut être utilisé pour interroger les données dans le package d’installation en utilisant MsiDatabaseOpenView et MsiGetSummaryInformation.

PMSIHANDLE hDbReadOnly = 0;
UINT uiStatus1 = MsiOpenDatabase(TEXT("c:\\test\\sample.msi"), MSIDBOPEN_READONLY, &hDbReadOnly);
if (ERROR_SUCCESS != uiStatus1)
{
    // process error
    return uiStatus1;
}

L’exemple suivant ouvre la base de données pour la lecture et l’écriture. Si l’application appelle MsiDatabaseCommit, toutes les modifications apportées à la base de données sont enregistrées. Si l’application n’appelle pas MsiDatabaseCommit, aucune modification n’est apportée à la base de données.

PMSIHANDLE hDbTransact = 0;
UINT uiStatus2 = MsiOpenDatabase(TEXT("c:\\test\\example.msi"), MSIDBOPEN_TRANSACT, &hDbTransact);
if (ERROR_SUCCESS != uiStatus2)
{
    // process error
    return uiStatus2;
}

L’exemple suivant prend une base de données existante, text.msi, et crée une nouvelle base de données, newtest.msi. Toutes les modifications apportées peuvent être enregistrées dans la nouvelle base de données en appelant MsiDatabaseCommit. La base de données existante spécifiée dans le paramètre szDatabasePath est inchangée.

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;
}

L’exemple suivant ouvre un package de correctifs Windows Installer (fichier .msp) en lecture seule. Le handle du correctif retourné peut être utilisé pour déterminer les sous-stockages de fichiers CAB et de transformations inclus dans le package de correctifs par des requêtes sur les tables _Streams et _Storages.

Windows Installer 2.0 : Non pris en charge. À compter de Windows Installer 3.0, l’application peut interroger la table MsiPatchSequence présente dans un package de correctifs qui utilise les nouvelles informations de séquencement de correctifs.

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;
}