0

だからこれは私を困惑させ、本当に奇妙に思えます。クライアントサーバーアプリのセットアップで「サーバー」コンポーネントとして機能するc#フォームをいくつか作成しました。(クライアントはudpデータを送信し、サーバープログラムはいくつかの数値をチャグして結果を送り返します。)さまざまな理由により、1つのフォームの4つのインスタンスと別のフォームの1つのインスタンスがすべて同時に実行されます。そして、電源がリセットされた場合にこれらすべてのフォームを自動的に開始するbatファイルがあります。

とにかく、私はこれを常に実行したままにして、ある程度信頼できるようにしようとしています。1か月前は正常に機能していましたが、過去数週間で、それらが消えていることに気づきました。時々彼らは1日、時には4日間起きていますが、その後消えます。(最後の発生まで、それらはすべて同時に消えたように見えましたが、私は見ていなかったので、確信が持てませんでした。今回は、何らかの理由で1つの異なるフォームが実行され続けました。)

そこで、ログを追加したところ、すべてのフォームが同じ秒で消え、_FormClosingイベントにTaskManagerClosingのCloseReasonが表示されることがわかりました。

事実、他の人がマシンに物理的にアクセスできないことを知っています。

これを引き起こす原因は何ですか?他の誰かが私のコンピュータが感染しているのではないかと考え始めていますか?考えただけですが、この動作はマルウェアやウイルスにとっては奇妙なことです。特に、コンピュータ上の他のすべてが正常に動作しているように見えるためです。それは私がtightVNCをインストールしていると言った、多分それはそれほど安全ではない。

それ以外はあまりありませんが、ウイルス対策ソフトウェアやAd-Awareがフォームを閉じているのではないでしょうか。

考え?前もって感謝します。

4

1 に答える 1

0

これは非常に奇妙に思えるので、いくつか考えてみてください。

まず、MSDN のドキュメントには、CloseReason.TaskManagerClosing が "Windows タスク マネージャーがアプリケーションを閉じている" ことを示していると記載されているため、誤解を招く可能性があります。むしろ、CloseReason.TaskManagerClosing は、ウィンドウが WM_CLOSE メッセージ (0x10) を受信したときに閉じる理由として設定されているように見えます。これは、システム上の任意のプロセスから発生する可能性があり、必ずしもタスク マネージャーから発生するわけではありません。

ここで疑問が生じます: なぜこれらのプロセスで WM_CLOSE が呼び出されるのでしょうか? 1 つの可能性として、UDP パケットをリッスンすると、セキュリティ ソフトウェア (ウイルス/アドウェア) でルールベースのフィルターがトリガーされ、プロセスが閉じられる頃にソフトウェアと Windows のイベント ログに表示される可能性があります。さらに、所有プロセスを知らずに診断することは困難です。

根本的な原因には対処しませんが、実用的なオプションの 1 つは、FormClosing イベントに応答して WM_CLOSE 要求をキャンセルすることです。

        if (e.CloseReason == CloseReason.TaskManagerClosing)
            e.Cancel = true;

もう 1 つのオプションは、ソフトウェアをアプリケーションではなく Windows サービスとして再構築することです。サービスは独自のユーザー セッションで実行されるため、サーバー タイプのアプリケーションに適している傾向があります。しかし、ユーザー インターフェイスの機能をサーバーの機能から分離する必要もあり、根本的な問題にも対処できません。

最後に、これがサーバーの場合は、インストールされているサービスやユーティリティに関係なく、何らかの方法で WM_CLOSE コマンドをアプリケーション インスタンスに送信している可能性がある場合は、再確認することをお勧めします。さらに、サーバー アプリケーション インスタンスをクリーンなサーバーに移動することは、問題を特定するための実際的な方法である可能性があります。

于 2011-07-30T07:28:54.513 に答える