J'écris un programme qui exécute les installations msi en mode silencieux. En utilisant MsiSetExternalUI et MsiSetInternalUI avec INSTALLUILEVEL_NONE je peux montrer ma boîte de dialogue de progression et détecter les erreurs lors de l'installation:Comment obtenir la liste des fichiers en cours d'utilisation lors de l'installation du fichier MSI avec ExternalUI
INT CALLBACK ProgressHandler(LPVOID pvContext, UINT uiMessageType, LPCTSTR szMessage)
{
INSTALLMESSAGE iMessage = (INSTALLMESSAGE)(0xFF000000 & uiMessageType);
if(INSTALLMESSAGE_PROGRESS == iMessage)
ShowProgress(...);
if(INSTALLMESSAGE_FILESINUSE == iMessage)
MessageBox(NULL, szMessage, _T("Files in use"), MB_OK);
}
...
DWORD dwMessageFilter = INSTALLLOGMODE_PROGRESS | INSTALLLOGMODE_FILESINUSE;
MsiSetExternalUI(&ProgressHandler, dwMessageFilter, NULL);
INSTALLUILEVEL pervousUILevel = MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL);
UINT res = MsiInstallProduct(sPath, NULL);
Le problème est que lorsque certains fichiers est utilisé mon rappel reçoit un message INSTALLMESSAGE_FILESINUSE, mais le paramètre szMessage ne contient que ce texte - " Les applications suivantes doivent être fermées avant de continuer l'installation: ". Si je cours le dossier de msi avec l'interface pleine il y a la boîte de dialogue avec la liste des programmes qui doivent être fermés avant que l'installation puisse continuer.
Comment puis-je obtenir cette liste et l'afficher à l'utilisateur lors de l'exécution de l'installation sans interface utilisateur?
Merci, cela a résolu mon problème. –