サービス内の NullReference 例外のトラブルシューティング
-
09-06-2019 - |
質問
さまざまなシステム監視操作を実行する Windows サービスがあります。ただし、SNMP 関連のチェックを実行すると、常に NullReference 例外が発生します。このコードは、ユーザー インターフェイス (ユーザー名とパスワード) を介して実行すると正常に動作しますが、サービスとして実行すると常にエラーが発生します。別のユーザーアカウント(自分のものを含む)としてサービスを実行しようとしましたが、うまくいきませんでした。SNMP 監視コードを PowerShell コマンドレット get-snmp (/n NetCmdlets から) の呼び出しに置き換えようとしましたが、同じエラーが発生します。
私が作業しているアプリケーションは ポリモン.
何か案は?
解決
デバッグするいくつかの方法:
- Windows イベント ログに追加情報はありますか?
- Windows サービスで Application_Exception のようなある種のグローバル例外イベントをリッスンできるはずだと思います。正確な名前は思い出せませんが、そこからスタック トレースを最後にダンプできます。
- サービス モードでプロジェクトのデバッグを開始できるはずです。
いくつかのコード スニペット/スタック トレース/情報は間違いなく役に立ちます。
他のヒント
例外をトリガーする前に、実行中のプロセスにデバッガーをアタッチできます。これにより、アプリケーションで何が起こっているのかをよりよく理解できるようになります。
私たちが見てきたいくつかのこと - インタラクティブとサービスの違いについて詳しく説明しますが、役立つかもしれません...
私たちが確認した中で、関連性がないと思われる点の 1 つは、ユーザー パスとシステム パス上にあるものとの違いです。
私たちが確認したもう 1 つのことは、一時ファイルに関連しています。私たちが利用していたサービスは、windows emp ディレクトリに大量のファイルを作成していました。これを追跡したところ、一時ファイルが 65000 個ほど作成され、ディレクトリに保持できる容量の制限に達していました。 ...
よろしく、クリス
私は以前にもこの種の問題に取り組んだことがありますが、まだ答えが見つからない場合は、次のことをお勧めします。
- 使用しているすべてのサードパーティのアプリとライブラリでトレース/ログを有効にし、エラーが stdout または stderr ではなくファイルに記録されるようにします。そこからヒントが見つかることもよくあります。
- Windows サービスは、起動前に設定された Windows ネットワークに依存している可能性があります。これは、環境 (他の人が示唆しているように、PATH) または他のサービスへの「依存関係」が原因である可能性があります。
ジェイ……