Windowsのスケジュールされたタスクを開発する方法は?
-
03-07-2019 - |
質問
毎日のデータを電子メールに添付するPDFにコンパイルするプロセスが必要です。開発中のアプリケーションで既にMSSQLを使用して電子メールを送信していますが、引き続きMSSQLを電子メールプロセッサとして使用したいと考えています。
私の研究では、Windowsサービスを作成することでこれを実現できることがわかりました。しかし、私は本当にこのプロセスを1日に1回だけ実行したいのです。常にアクティブなWindowsサービスを維持するのはやり過ぎのようです。
タスクスケジューラを使用して自己構築アプリケーションを実行したことはありません。私はそれについて正しい方法で行っていることを確認したい。私が理解しているように、私はする必要があります...
- Visual Studioで新しいプロジェクト(プロジェクトX)を作成します
- PDFを生成し、MSSQLと対話して電子メールを送信するプログラム(プロジェクトX)
- EXEにビルド(プロジェクトX)
- タスクスケジューラを使用してEXEをスケジュールし、必要なスケジュールで実行します。
心配する必要があるセキュリティ面はありますか?私が考えることができるのは、MSSQL接続文字列を暗号化することだけです。そして、もちろん、Webアプリが存在するWebアクセス可能なディレクトリからEXEを除外します。
これはばかげた質問だと思う人もいると思いますので、事前にヘルプ/確認をお願いします。
解決
あなたが考慮していないことがわかるのは、タスクスケジューラがEXEを実行するIDだけですが、それは環境内のすべてをどのように制御しているように見えるかを気にする必要はありません。
他のヒント
Estebanは次のように述べています:これはあなたのアカウントで実行されているだけで、マシンにサインオンしたままですか?その場合、それが最大のセキュリティリスクです。スクリーンセーバーを使用してログインプロンプトを強制することができます。これは、ログアウトよりも安全性が高いことは事実です。ただし、これが「ベストプラクティス」と見なされるとは思いません。
1日に1回だけ起動するWindowsサービスの構築を検討します。実行後のテストは非常に難しいため、優れたテストメカニズム(Unit-testable dllにコンパイルする独立したクラスをお勧めします)を用意する必要がありますが、ビルドするのはそれほど難しくありません。 。しかし、「謎」を聞かせないでください。サービスアプリやリソース使用量のアイデアがあなたを先送りにします。あなたは彼らがどれほど簡単であるかに驚くでしょう。リソースに関する限り...完全なWinformsアプリを実行し続けるためにより多くのリソースを費やしています!
Windowsサービスを構築する場合、サーバー(データベースが存在する)の起動時に起動するように設定できます。電子メールを送信するための外部追跡システムがあり、おそらく別のデータベースに保存されています。サーバーが起動すると、サービスも起動します。サービスは、今日メールが送信されたかどうかを確認します。そうでない場合は、電子メールを作成し、電子メールを送信してから、ログに記録します(想定されるdbテーブル)。次に、サービスを24時間スリープさせてから、再度イベントを使用して確認します。繰り返す。