Aufrufen von Datenbankfunktionen aus Programmen

Vor dem Aufrufen einer der folgenden Datenbankfunktionen aus einem Programm, z. B. einer benutzerdefinierten Aktion oder eines Automatisierungsprozesses, muss das Installationsprogramm zuerst die Aktionen CostInitialize, FileCost und CostFinalize ausführen.

Im Folgenden finden Sie eine Liste der Datenbankfunktionen, die im Windows Installer verwendet werden:

Vor dem Aufrufen von MsiSetFeatureAttributes aus einem Programm muss das Installationsprogramm zuerst die Aktion CostInitialize ausführen. Das Installationsprogramm führt dann die Aktion CostFinalize nach MsiSetFeatureAttributes aus.

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