Настройка настраиваемого действия проекта в C++ "[TARGETDIR]"

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

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

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 ответа

WCHAR vbuff [MAX_PATH] = {0};

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

в свойстве Install Custom Action в свойстве CustomactionData я просто помещаю [TARGETDIR]

vbuff - целевой каталог

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

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

Я уверен, что мне не хватает теории по этому вопросу.

Предполагая, что это часть пользовательского действия, вы можете использовать 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);
Другие вопросы по тегам