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

これがカスタム アクションの一部であると仮定すると、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 に答える
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 に答える