私は、ニーズに応じて他の多くのプロセスを起動するLocalSystemアカウントとしてC#サービスを実行しています。これは数ヶ月間うまくいっています。ちょうど今週、いくつかのサブプロセスがクラッシュしています。私はそれらにリモートデバッガを接続しており、メモリ割当てに失敗しています(C++の新しい演算子は0x0を返します)。これはクラッシュの間接的な原因です。サービスによって起動されたプロセスはメモリを割り当てることができません
面白いことに、マシンにRDPをインストールすれば、CMDからプロセスを簡単に起動できます。しかし、サービスが開始されたときは、何もしません。
マシンはWindows XP SP3を実行しています。コミット料金から物理RAMの約80%が外れるわけではありません。
サービスで使用できるプロセスやメモリの量には、サービスによって生成されたプロセスを含むいくつかの特別な制限がありますか?
これらのプロセスがメモリを割り当てることができないその他のアイデア。
EDIT:
私はSysinternalsのprocmonを持つクラッシュのシナリオをよく見て持っていたし、それは(私が見ることができるということ)は何も明らかにしていません。それは正常になっているように見え、突然クラッシュします。 C++の新しい呼び出しからヌルポインタを逆参照した後にクラッシュしていることをリモートデバッガにアタッチすることで確認できます。これは、アプリケーションに割り当てられた最初のオブジェクトの1つであり、決して失敗することはありません。
サービスオプションを有効にすると、サービスがデスクトップとやりとりすることを許可すると、すべての子プロセスが正しく起動することも発見されました。ただし、RDP経由で接続するとデスクトップに表示されますが、残念ながらRDP = YUK経由でログアウトすると終了します!しかしこれはまだ理想的な解決策ではありません。なぜなら、子プロセスが6番目の子プロセスの後にメモリを割り当てることができなかった理由を本当に知りたいのです。
ポストにこれらのクラッシュからのイベントビューアのエラーメッセージを追加してください。 – harrymc
イベントログ内の唯一のメッセージは、デバッガが読み込みに失敗し、アプリケーションがクラッシュする(アクセスできないアドレスを読み取る)ことです:「MDS_16.exe [456]で未処理のWin32例外が発生しました。次のエラー:ユーザーがログオンしていないためデバッガを起動できませんでした。 詳細については、「ジャストインタイムデバッグ、エラー」のドキュメントインデックスを確認してください。 詳細については、http: ://go.microsoft.com/fwlink/events.asp " –
私が前に述べたように、私はクラッシュするプロセスにリモートデバッグすることができ、C++の新しいコールがnullを返しています。これは逆参照され、クラッシュします。実際の問題は、プロセスが開始するためにメモリを割り当てることができないことです。 –