Настройка настраиваемого действия проекта в C ++ "[TARGETDIR]" - PullRequest
1 голос
/ 07 июля 2010

Я пытаюсь скопировать файл в целевой каталог установки.

Я использую это:

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

, если я использую это:

CopyFile(L"C:\\Users\\waldek\\Desktop\\Capture.png", L"C:\\Program Files (x86)\\Microsoft\\Setup1\\LiveFo@nextjmp.com\\Capture.png", 0); 

этоработает, и это в основном то, что DestPath должен оценить, я вижу, что он оценивает, когда я использую PMSIHANDLE, он предупреждает правильный путь ...

Как заставить CopyFile для оценки "[TARGETDIR]";

Ответы [ 2 ]

0 голосов
/ 07 июля 2010

Предполагая, что это часть пользовательского действия, вы можете использовать MsiFormatRecord. Обработка ошибок опущена, это будет выглядеть примерно так:

PMSIHANDLE hRec = MsiCreateRecord(1);
MsiRecordSetString(hRec, 0, _T("[TARGETDIR]LiveFo@nextjmp.com"));

TCHAR szPath[MAX_PATH] = {0};
DWORD cchPath = MAX_PATH;
MsiFormatRecord(hInstall, hRec, szPath, &cchPath);
0 голосов
/ 07 июля 2010
WCHAR vbuff [MAX_PATH] = {0};

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

в Установка пользовательского действия в свойстве CustomactionData, я просто положил [TARGETDIR]

vbuff является целевым каталогом

тогда, конечно, конкатенация и FileCopy выполнены, как и ожидалось ...

это сработало для меня ... но я все еще хотел бы знать, почему, это не было в исходном вопросе, который я разместил, самое странное, что PMSIHANDLE выписал правильный путь, но я предполагаю, что "перевод" отсутствовал шаг при передаче его в функцию FileCopy ...

Я уверен, что мне не хватает какой-то теории по этому поводу.

...