1

2つの異なる.cppのプロジェクトがあります。MyProjはMyCPP1とMyCPP2で構成されていますMyCPP1には、wixを使用してmsiから実行されるさまざまな関数が含まれています。

extern "C" __declspec(dllexport) UINT __stdcall MyCAFunction(MSIHANDLE hInstall)
{
    TCHAR name[MAX_PATH] = {0};
    DWORD nameLen = MAX_PATH;
    TCHAR keydir[MAX_PATH] = {0};
    DWORD keydirLen = MAX_PATH;

    MsiGetProperty (hInstall, L"Val1", name, &nameLen);
    MsiGetProperty (hInstall, L"Val2", keydir, &keydirLen);
}

そしてwixコードは次のとおりです。

<CustomAction Id="MyCA.Props" Return="check" Property="MyCA" value="Val1=[LogonUser];Val2=[INSTALLDIR]"/>
<CustomAction Id="MyCA" Return="check" Execute="deferred" BinaryKey="Binary1" DllEntry="_MyCAFunction@4" HideTarget="no" />
<Binary Id="Binary1" SourceFile="$(var.ConfDir)MyProj.dll" />

ええと...だから私はエラーがあります:

エラー1723:このインストールを完了するために必要なDLLを実行できませんでした。

どのように掘る必要がありますか?

私はCAタイプの方法についていくつか考えています...たとえば、FileKey参照を持つCAの基本タイプは17ですが、私のCAタイプは1041です(Orcaが役立ちます)。それは私の問題の問題でしょうか?

さまざまなタイプのCAでバージョンを確認しました。CAのパラメータのちょうどcoz(Execute = "deferred"変更タイプを1041から17(標準タイプ)に削除するだけです。この問題を解決する最後のことはdllです。今日それを見るでしょう...何か疑惑はありますか?

dllを構築するさまざまな方法を試しました。C++Wixカスタムアクションプロジェクトのサンプルプロジェクトによってビルドされたdllだけで動作します。3つまたは4つの異なるプロジェクトを比較しました。小道具、リンク、外部の依存関係によって...問題を見つけることができません...助けてください...

4

1 に答える 1

1

DLLからエクスポートされた関数の名前を確認してください。

これを行うには、フラグdumpbinを使用してDLLでユーティリティを実行します。/exports

于 2012-05-18T06:46:29.247 に答える