デバッグ用のWindowsServiceのインストール
-
22-10-2019 - |
質問
デバッグビルドを開始しようとしています WindowsService
しかし、タイムリーな方法で開始されなかったというエラーが発生しています。
CTORを掃除しました OnStart
しかし、それでも開始されないので、プロジェクトディレクトリのデバッグディレクトリだけでなく、ロードする必要があると考えています。たぶんそのすべての衝突 main()
乾燥させるためにぶら下がっていますか?
サービスをデバッグするためのポインターはありますか?明らかにそれがそのエントリを許可しないので、私はそれをvstudioで直接実行することはできません OnCustomCommand(int cmd)
メンバーとそこで破ります。
解決
私が正しく理解していれば、あなたはそれがアイドル状態に座る前にサービスをデバッグすることができるようにしたいです。
使用できます debugger.break() このための機能。たとえば、デバッグビルド中に、以下をメイン関数にしばしば配置します。
#if DEBUG
if (!Debugger.IsAttached)
{
Debugger.Break();
}
#endif
他のヒント
Onstartメソッドではできるだけ少ないことをします。すべての作業を行うスレッドをキックオフするのに十分なinitなので、できるだけ早くOnStartから戻ることができます。次に、スレッドデリゲートでは、Reddogのコードを追加してデバッガーに分割することができます。おそらくスレッドを使用して、最初にプロセスに接続する時間を与えます。
もう1つの選択肢は、サービスにメインメソッドを追加して、サービスクラスのインスタンスを作成してStart/OnStopを呼び出し、プロジェクト出力をコンソールアプリに変更することです。 Installutilを介したサービスを使用すると、F5を実行して、コンソールアプリとしてVisual Studioでデバッグできます。
詳細 ここ
サービスをサービスとしてのみデバッグしたい場合は、OnStartメソッドが処理を実行してから返すスレッドを起動することをお勧めします。 debugger.break();
スレッドスリープは、サービスコントロールマネージャーを使用してサービスを開始した後、デバッガー.break()に到達し、デバッガーが破損し、シングルステップになります。重要なことは、30秒前にOnStartから戻って、ブレークポイントに達する前にデバッガーをプロセスに添付することです。
また、debugger.breakがデバッガーを添付するオプションを提供すると思いますので、コードで試してみてください(uiがないはずですが、サービスでうまく再生されるかどうかはわかりません)。 30秒前にあなたの代表者とプロセスに添付します。