Appel de fonctions de base de données à partir de programmes

Avant d’appeler l’une des fonctions de base de données suivantes à partir d’un programme, comme une action personnalisée ou un processus d’automatisation, le programme d’installation doit d’abord exécuter l’action CostInitialize, l’action FileCost et l’action CostFinalize.

Voici la liste des fonctions de base de données utilisées dans Windows Installer :

Avant d’appeler MsiSetFeatureAttributes à partir d’un programme, le programme d’installation doit d’abord exécuter l’action CostInitialize. Le programme d’installation exécute ensuite l’action CostFinalize après MsiSetFeatureAttributes.

L’exemple suivant illustre l’ordre dans lequel les actions de fonction doivent être appelées lors de l’utilisation de MsiGetTargetPath dans un programme.

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