Auf Englisch lesen

Freigeben über


Aufrufen von Datenbankfunktionen aus Programmen

Bevor Sie eine der folgenden Datenbank funktionen aus einem Programm aufrufen, z. B. eine benutzerdefinierte Aktion oder einen Automatisierungsprozess, muss das Installationsprogramm zuerst die CostInitialize-Aktion, FileCost-Aktionund CostFinalize-Aktionausführen.

Es folgt eine Liste der Datenbankfunktionen, die in Windows Installer verwendet werden:

Vor dem Aufrufen MsiSetFeatureAttributes aus einem Programm muss das Installationsprogramm zuerst die CostInitialize-Aktion ausführen. Anschließend führt das Installationsprogramm die CostFinalize-Aktion nach MsiSetFeatureAttributesaus.

Das folgende Beispiel veranschaulicht die Reihenfolge, in der Funktionsaktionen aufgerufen werden müssen, wenn MsiGetTargetPath- in einem Programm verwendet wird.

#include <windows.h>
#include <Msiquery.h>
#include <tchar.h>
#pragma comment(lib, "msi.lib") 

int main()  
{ 

MSIHANDLE hInstall;
TCHAR *szBuf;
DWORD cch  = 0 ;
 
if(MsiOpenPackage(_T("PathToPackage...."), &hInstall) == ERROR_SUCCESS)
{
    if(MsiDoAction(hInstall, _T("CostInitialize"))==ERROR_SUCCESS  
        && MsiDoAction(hInstall, _T("FileCost"))==ERROR_SUCCESS  
        && MsiDoAction(hInstall, _T("CostFinalize"))==ERROR_SUCCESS)   
    { 
        if(MsiGetTargetPath(hInstall, _T("FolderName"), _T(""),&cch)==ERROR_MORE_DATA)
        { 
            cch++; // add 1 to include null terminator since MsiGetTargetPath does not include it on return 
            szBuf = (TCHAR *) malloc(cch*sizeof(TCHAR));
            if(szBuf)
            {
                if(MsiGetTargetPath(hInstall, _T("FolderName"), szBuf,&cch)==ERROR_SUCCESS)
                {
                    // Add code to use szBuf here
                }
                free(szBuf);
            }
        } 
    } 
    MsiCloseHandle(hInstall);
}

return 0;  
}