Memanggil Fungsi Database dari Program

Sebelum memanggil salah satu Fungsi Database berikut dari program, seperti tindakan kustom atau proses otomatisasi, alat penginstal harus terlebih dahulu menjalankan tindakan CostInitialize, tindakan FileCost, dan tindakan CostFinalize.

Berikut ini adalah daftar fungsi database yang digunakan di Penginstal Windows:

Sebelum memanggil MsiSetFeatureAttributes dari program, alat penginstal harus terlebih dahulu menjalankan tindakan CostInitialize. Alat penginstal kemudian menjalankan tindakan CostFinalize setelah MsiSetFeatureAttributes.

Contoh berikut mengilustrasikan urutan di mana tindakan fungsi harus dipanggil saat menggunakan MsiGetTargetPath dalam program.

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