1

SQL ServerデータベースとやりとりするC#コンソールアプリケーションがあり、システムの起動時とユーザーログイン前に起動するように構成する必要があります。私のアプリケーションは、(処理後の)データベースとの間でデータの読み取り/書き込みを行い、ログメッセージをコンソールウィンドウに書き込む無限ループです。ユーザーログイン前にコンソールアプリケーションを起動する

私はWindowsタスクスケジューラを試しました。

  1. アプリデータベース(エラーメッセージにアクセスすることはできません:私は二つの問題が持っていたアプリケーションが起動しますが、「。ログインで要求されたログインに失敗しました 『』できません開いているデータベース」MYDATABASEをログファイルから抽出)
  2. 私がウィンドウにログインすると、アプリケーションコンソールを取得できず、タスクマネージャのプロセスリストに表示されません。

この問題には解決策があるのか​​どうかはわかりませんが、実際にはサーバーが離れているため、電源切断が問題になりますその領域では、私は定期的にそれをチェックし、カットオフが発生するたびに私のアプリを起動する必要があります。

ありがとうございました。

+2

Windowsサービスとして実行したことがありますか? –

答えて

1

ここで正しいことは、2つのプログラムを使用することだと思います。まず、起動時に起動して失敗するたびに再起動するWindowsサービス。このサービスは、SQLサーバー資格情報(Windows資格情報ではない)に接続するか、データベースにアクセスできるサービスIDで実行する必要があります。 2番目のプログラムは、ユーザーのログイン時に開始され、Windowsサービスからのログメッセージを読み取り/表示します。基本的には、サービスによって書き込まれたログファイルには "tail"のように機能しますが、必要に応じてサービスから直接メッセージを受信できるように、より洗練されたロガー登録プロセスを考え出すことができます。

+0

助けてくれてありがとう。私の場合、これが唯一の解決策だと思われます。実際、私はアプリケーションを2つの部分に分けることにしました.1つはWindowsサービスです。ユーザーがログインする前から開始されますが、SQL Serverデータベースにアクセスするには、MSSQLSERVERに依存関係を追加する必要がありました。 Windowsサービスは、単に私のコンソールアプリケーションを起動する新しいプロセスを作成し、UDP Appenderを持つlog4Netライブラリ([link](https://logging.apache.org/log4net/))を使って変更を記録します。 UDPネットワークメッセージは、指定されたポート –

+0

を使用してIP経由で送信されます.2番目の部分はGUI(winforms)アプリケーションで、Windowsサービスが使用する同じポートからUDPメッセージを受信するUDPリスナを追加しました。その後、ユーザーインターフェイスにメッセージを記録します。リスナーをユーザーインターフェイスから分離し、UIのフリーズを避けるために、SynchronizationContextクラスを使用して、新しいメッセージを受信するたびにUIにレポートするスレッド(リスナー)を起動しました。 –

1

おそらく、あなたのアプリをWindowsサービスにリファクタリングしたいと思うでしょう。アプリ自体に直接アクセスすることはできないという事実を生かさなければなりません。通常、サービスを管理できるコンパニオンアプリを作成します。あなたがWindowsでよく知っているサービスを考えてみましょう... IIS、SQL Serverなど...高レベルで、彼らはすべてこのように動作します。

関連する問題