24

カスタム アクションをデバッグしようとしました。Debugger.Break() をカスタム アクション cs に入れました。カスタム アクションをビルドすると、次のファイルが作成されます。

myCustomAction.dll
myCustomAction.CA.dll
myCustomAction.pdb

wix プロジェクトでは、バイナリ タグ内で myCustomAction.CA.dll を参照します (myCustomAction.dll ではありません)。myCustomAction.CA.pdb が存在しないため、これがデバッグが機能しない理由ですか? メッセージボックスが表示されているときに、メッセージボックスとプロセスへのアタッチも試しました。しかし、次のメッセージが表示されます: PDB ファイルが見つからないか、開くことができません。

私が間違っていることは何ですか?私はwix 3.5バージョンとビジュアルスタジオ2010を持っています。

4

4 に答える 4

68

お世話になった記事はこちら。

カスタム アクションの最初の行に次のコードを追加するだけです。

System.Diagnostics.Debugger.Launch();

あとはインストーラーを実行するだけです。アクションの実行が開始されると、ポップアップ ウィンドウが表示され、デバッグ用に Visual Studio を起動するよう提案されます。

参照ライブラリは正しいです。*.CA.dll である必要があります。また、MessageBox を使用したアプローチも機能しますが、rundll32 プロセスにアタッチする必要があります。

于 2013-05-18T09:32:51.997 に答える
5

DTF カスタム アクションでは、次の 2 つの手法があります。

1) カスタム アクションに MessageBox を配置し、Visual Studio をそのプロセスにアタッチします。アタッチするときは、ネイティブと CLR がロードされた rundll32 プロセスを探します。

2) MsiBreak 環境変数をエントリ ポイントの名前に設定し、マシンを再起動します。そのカスタム アクションが呼び出されると、DTF はデバッガを呼び出します。

それ以外の場合、私の一般的な提案は、エントリ ポイントを再利用可能なクラスを MSI に接続する非常に薄いベニアにすることです。通常、コンソール アプリでデータをフィードしてすべてをテストし、そのクラスを DTF に接続できるスタンドアロン クラスを作成します。インストーラーのカスタム アクションをデバッグする必要はほとんどありません。

そうでなければ、私は一般的にこれが機能することを知っています。

于 2013-03-14T13:28:47.117 に答える
4

何が問題なのかわかりませんが、サンプルのカスタム アクションとそれをデバッグする方法を含む記事を次に示します。次の記事で説明されているように動作するはずです: http://www.advancedinstaller.com/user-guide/qa-c-sharp-ca.html

于 2013-03-14T11:49:33.787 に答える