Programlardan Veritabanı İşlevlerini Çağırma

Özel eylem veya otomasyon işlemi gibi bir programdan aşağıdaki Veritabanı İşlevlerinden herhangi birini çağırmadan önce yükleyicinin önce CostInitialize eyleminiçalıştırması, FileCost eylemive CostFinalize eylemi.

Windows Installer'da kullanılan veritabanı işlevlerinin listesi aşağıdadır:

MsiSetFeatureAttributes bir programdan çağırmadan önce yükleyicinin önce CostInitialize eylemini çalıştırması gerekir. Yükleyici daha sonra MsiSetFeatureAttributes sonra CostFinalize eylemini çalıştırır.

Aşağıdaki örnekte, bir programda MsiGetTargetPath kullanılırken işlev eylemlerinin çağrılma sırası gösterilmektedir.

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