Настройка настраиваемого действия проекта в 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);