1

我正在尝试将文件复制到设置目标目录中。

我正在使用这个:

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]”;

4

2 回答 2

0
WCHAR vbuff [MAX_PATH] = {0};

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

在属性 CustomactionData 中的安装自定义操作中,我只是把 [TARGETDIR]

vbuff 是目标目录

然后当然是按预期执行连接和 FileCopy ......

这对我有用......但我仍然想知道为什么,它没有出现在我发布的原始问题中,最奇怪的是 PMSIHANDLE 写出了正确的路径,但我猜缺少“翻译”步骤在 FileCopy 函数中传递它...

我确信我在这方面缺少一些理论。

于 2010-07-07T13:57:14.483 回答
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);
于 2010-07-07T14:01:23.040 回答