2010-12-10 18 views
0

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?

Répondre

0

This thread in the wix-users mailing list suggère d'utiliser MsiSetExternalUIRecord au lieu de MsiSetExternalUI vous permet de récupérer les noms de fichiers dans les champs de l'enregistrement (correspondant à [1], [2], etc.). Faites attention aux vides au milieu. Cela suggère que ces valeurs devraient être disponibles dans szMessage, donc je ne comprends pas pourquoi elles ne seraient pas déjà visibles, sauf peut-être qu'elles contiennent un NUL et finissent la chaîne de cette façon.

+0

Merci, cela a résolu mon problème. –