2012-04-01 17 views
0

C++で記述されたカスタムアクションDLLを参照する.msiをビルドします。 Visual Studio 2010でカスタムアクションDLLをビルドすることはできますが、すべてがうまくいきます - wcautil.h、dutil.hなどへの参照が行われます。ただし、.msiにDLLを追加すると、バイナリテーブル、およびキーなど)は、カスタムDLLのExitOnFailureへの最初の参照時に消えます。私はこれが何とかwcautil.libがDLL/.msiと一緒に来ていないことを意味していると推測していますが、その理由はわかりません - DLLにはwcautil_2010.lib(およびdutil_2010.libとmsi .lib)を追加のライブラリの依存関係リストに追加しました。(テンプレートVSプロジェクトのものです)wixカスタムアクションを使用したMSI DLLがwcautil関数で終了する

wcaUtilとdutilが.msiに実際に存在するかどうかを知ることができますか? WiXのWca機能が実行されるように、私はそれらが存在していることを確認するために何をする必要がありますか?

+0

DLLは静的にリンクされている必要があります。 MSIはDLLを抽出して実行しますが、依存するDLLは自動的に抽出されません。それは初期化されていない変数/ポインタですか? –

+0

DLLはどのように静的にリンクしていますか?私は数日前にそれを見て、人々はそれが不可能だと言っていた。私はVS .vcxprojファイルが 'additional linkage dependencies'領域に必要なライブラリへの参照を含み、libsが$(WIX)sdk \ libの下にあることを確認します。 –

+0

@DaveCombsあなたのプロジェクトがすでにスタティックにwcautilとdutilにリンクするように設定されているようです(Wix CAプロジェクトがこれを設定しています)。あなたが 'ExitOnFailure'への最初の呼び出しまでコードを実行しているなら、あなたはokをリンクしています。あなたはどんなエラーを出していますか?あなたは 'ExitOnFailure'にどうしているのですか?あなたはデバッガを付けてみましたか? – heavyd

答えて

0

最後に何が起こっているかを把握しました。 ExitOnFailureの直前のWcaInitializeは、実際には悪いエラーコードを返すことになりました(何らかの理由で、DLLがMSIのUIフェーズで実行されているため、 DLLプロジェクトにVisual StudioのテンプレートWixカスタムアクションDLLテンプレートから直接作成されているため、バグのように見えるVersionリソースが含まれていないことを示すエラーコード)物事は続きました。すべての有益なコメントありがとう!

関連する問題