Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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, action FileCostet Action CostFinalize.
Voici une liste des fonctions de base de données utilisées dans Windows Installer :
- MsiGetComponentState
- MsiGetFeatureCost
- MsiGetFeatureState
- MsiGetFeatureValidStates
- msiGetSourcePath
- MsiGetTargetPath
- MsiSetComponentState
- MsiSetFeatureState
- MsiSetInstallLevel
- MsiSetTargetPath
- msiVerifyDiskSpace
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;
}