1

J'essaie de copier le fichier dans le répertoire cible de l'installation.Configurer l'action personnalisée du projet en C++ "[TARGETDIR]"

J'utilise ceci:

TCHAR destPath[ MAX_PATH ] = &L"[TARGETDIR]"; 
wcscat_s(destPath, L"[email protected]\\Capture.png"); 
CopyFile(L"C:\\Users\\waldek\\Desktop\\Capture.png", destPath, 0); 

si j'utilise ceci:

CopyFile(L"C:\\Users\\waldek\\Desktop\\Capture.png", L"C:\\Program Files (x86)\\Microsoft\\Setup1\\[email protected]\\Capture.png", 0); 

cela fonctionne, ce qui est essentiellement ce que destPath devrait évaluer, je peux voir qu'il évalue quand j'utilise PMSIHANDLE , il alerte le bon chemin ...

Comment forcer CopyFile à évaluer "[TARGETDIR]";

Répondre

0
WCHAR vbuff [MAX_PATH] = {0}; 

DWORD vlen = MAX_PATH; 
UINT gp = MsiGetPropertyW(hInstall, L"CustomActionData", vbuff, &vlen); 

dans l'installation d'action personnalisée dans la propriété CustomActionData, je viens de mettre [TARGETDIR]

vbuff est le répertoire cible

puis bien sûr la concaténation et l'FileCopy exécuté comme prévu ...

cela a fonctionné pour moi ... mais je voudrais toujours savoir pourquoi, il n'a pas dans la question initiale que j'ai posté, le plus étrange était que le PMSIHANDLE a écrit le bon chemin, mais je suppose qu'il "traduction" étape manquait en le passant dans la fonction FileCopy ...

Je suis sûr qu'il me manque une théorie à ce sujet.

0

En supposant que cela fasse partie d'une action personnalisée, vous pouvez utiliser MsiFormatRecord. Erreur de gestion omis, il ressemblerait à quelque chose comme ceci:

PMSIHANDLE hRec = MsiCreateRecord(1); 
MsiRecordSetString(hRec, 0, _T("[TARGETDIR][email protected]")); 

TCHAR szPath[MAX_PATH] = {0}; 
DWORD cchPath = MAX_PATH; 
MsiFormatRecord(hInstall, hRec, szPath, &cchPath);