在C ++中设置项目自定义操作“[TARGETDIR]”

时间:2010-07-07 09:35:47

标签: visual-c++ windows-installer custom-action visual-c++-2008

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

我正在使用它:

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 :(得分: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);