我正在尝试将文件复制到设置目标目录中。
我正在使用它:
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]”;
答案 0 :(得分:0)
WCHAR vbuff [MAX_PATH] = {0};
DWORD vlen = MAX_PATH;
UINT gp = MsiGetPropertyW(hInstall, L"CustomActionData", vbuff, &vlen);
在属性CustomactionData中的Install Custom Action中,我只是放了[TARGETDIR]
vbuff是目标目录
然后当然连接和FileCopy按预期执行...
这对我有用......但我仍然想知道为什么,它没有在我发布的原始问题中,最奇怪的是PMSIHANDLE写出了正确的路径,但我猜有“翻译”在FileCopy函数中传递它时缺少步骤...
我确信我错过了一些理论。
答案 1 :(得分:0)
假设这是自定义操作的一部分,您可以使用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);