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:
- MsiGetComponentState
- MsiGetFeatureCost
- MsiGetFeatureState
- MsiGetFeatureValidStates
- MsiGetSourcePath
- MsiGetTargetPath
- MsiSetComponentState
- MsiSetFeatureState
- MsiSetInstallLevel
- MsiSetTargetPath
- MsiVerifyDiskSpace
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;
}