2

Windows Server で 24 時間 365 日維持する必要がある (サード パーティの) WinForms アプリケーションがあります。System.Diagnostics.Process私が最初に考えたのは、( を使用して) アプリケーションを起動し、クラッシュした場合やサーバーが再起動した場合にアプリケーションを再起動する Windows サービスを作成することでした。

これは可能ですか?サーバーにサインインしているユーザーがいない場合でも開始する必要があります。誰もログインしていないときに、ユーザー インターフェイスを備えたアプリケーションを実行できますか? いいえの場合、回避策はありますか?

NB アプリケーションと対話する必要はまったくありません。アプリケーションを起動するだけで済みます。

4

2 に答える 2

0

別のアプローチを考えることをお勧めします。Windowsサービスを介してユーザーにGUIを表示しようとするのは簡単なことではありません。同様の状況に遭遇し、最終的に別のアプローチを取らなければなりませんでした.

Service から UI を直接表示できない理由: これは、Windows Vista 以降の OS バージョンで Windows OS に一部のセキュリティ実装が導入されたためです。Microsoft は、Windows サービスがユーザーのデスクトップと直接対話することを許可していません。これは、セキュリティ上の欠陥につながるためです。

-

アプリケーションと対話する必要はありません

その場合、アプリケーションは操作を続行するためにユーザーの操作を必要とせず、独自の操作を行うと思いますか? その場合は、command promptexe を取得することもできます。

サーバーにサインインしているユーザーがいない場合でも起動する必要があります

Windows タスク スケジューラを使用することを強くお勧めします。これにより、あなたの生活がはるかに楽になります。ユーザーがプログラムを手動で開始する必要はありません。コンピューターの起動/再起動時にプログラムを開始したり、特定の間隔でプログラムを実行するようにスケジュールしたりすることもできます。他の優れた .net タスク スケジューリング ライブラリも確認できます。quartznetはその 1 つです。

于 2013-10-01T06:18:14.070 に答える
0

フォームを 24 時間年中無休で実行し続ける必要があるのはなぜですか? ここに私が想像できるいくつかの可能性があります。

  1. 頻繁に発生する特定の動作が必要です。
  2. 他のアプリケーションが接続するポートを開いています。
  3. 従業員がアプリケーションを終了できないようにする必要があります。

答えが #3 の場合、Windows サービスは正しい答えではなく、何をしようとしても大規模なハッキングになるだけです。それが 1 または 2 の場合は、1 つのアプリケーションを 2 つに分割することを検討する必要があります。

定期的なタスクの場合、最も簡単な解決策は、コンソール アプリケーションを開発し、Windows タスク スケジューラでタスクを設定することです。これは、Windows サービスよりも管理とデバッグがはるかに簡単です。ある種のソケット サービスを実行しようとしている場合、典型的なアプローチは、GUI を使用せずにアプリケーションを作成することであり、それにアクセスする唯一の方法はソケット接続を介することです。WinForm が閉じられると、ソケット サービスは処理を続け、WinForm は再度開いたときに最新の情報を取得できます。

于 2013-09-30T18:13:23.357 に答える