1

我想將文件複製到安裝目標目錄。安裝項目自定義操作在C++「[TARGETDIR]」

我使用這個:

TCHAR destPath[ MAX_PATH ] = &L"[TARGETDIR]"; 
wcscat_s(destPath, L"[email protected]\\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\\[email protected]\\Capture.png", 0); 

它的工作原理,這基本上是什麼destPath應求,我可以看到,它的計算結果,當我使用PMSIHANDLE它警告正確的路徑...

如何強制CopyFile evalue「[TARGETDIR]」;

回答

0
WCHAR vbuff [MAX_PATH] = {0}; 

DWORD vlen = MAX_PATH; 
UINT gp = MsiGetPropertyW(hInstall, L"CustomActionData", vbuff, &vlen); 
在安裝自定義操作物業CustomactionData

,我只是把[TARGETDIR]

VBUFF是目標目錄

那當然級聯和按預期執行FileCopy ...

這對我有用......但我仍然想知道爲什麼,它沒有在我發佈的原始問題中,最奇怪的是PMSIHANDLE寫出了正確的路徑,但我猜那裏有「翻譯」通過它缺少一步在FileCopy函數中...

我相信我對此失去了一些理論。

0

假設這是自定義操作的一部分,可以使用MsiFormatRecord。錯誤處理省略,它看起來像這樣:

PMSIHANDLE hRec = MsiCreateRecord(1); 
MsiRecordSetString(hRec, 0, _T("[TARGETDIR][email protected]")); 

TCHAR szPath[MAX_PATH] = {0}; 
DWORD cchPath = MAX_PATH; 
MsiFormatRecord(hInstall, hRec, szPath, &cchPath); 
相關問題