Windows サービスとスタートアップ トリガーを使用したタスク スケジューラ

Windows サービスとスタートアップ トリガーを使用したタスク スケジューラ

私は、NSSM (Non Sucking Service Manager) の助けを借りて、デスクトップ アプリケーションをサービスとして実行しています。NSSM は、サービスとして実行するように作成されていないアプリケーションをサービスとして実行するためのラッパーです。

私は、Windows 10 を搭載した古いラップトップをサーバーとして使用し、いくつかのアプリケーションを Windows サービスとして実行しています。ラップトップにはユーザーがログインしていないため、必要なリソースが少なく、Windows サービスのおかげで、Windows が新しい更新プログラムをインストールして再起動しても、アプリケーションは常に実行されています。

今は、アプリケーションが別のアプリケーション (NSSM) の助けを借りずに Windows サービスとして単独で実行できればよいのですが、それが実現することは決してないだろうとわかっています。アプリケーションはデスクトップ アプリケーションであり、サービスとして実行することを意図したものではありません。開発者がそのような機能でアプリケーションを強化することは決してありません。(私はすでにそのことを尋ねました。)

実際には、アプリケーションをサービスとして実行する代わりに、「Windows の起動時」トリガーを使用してタスク スケジューラでアプリケーションを起動する方法があります。

どちらの場合も、ユーザーはログインする必要がなく、コンピューターは自動的に再起動し、アプリケーションは常にネットワーク内で利用可能になります。タスク スケジューラの利点は、アプリケーションにラッパー (NSSM) が不要であることです。

しかし、タスク スケジューラの信頼性についてはよくわかりません。Windows サービスは、アプリケーションを 24 時間 365 日実行することを目的としており、多くの回復オプションがあります。タスク スケジューラは、アプリケーションを 24 時間 365 日ではなく定期的に実行することを目的としているので、回復オプションはありません。

私の質問は次のとおりです。

「Windows の起動時」トリガーを備えたタスク スケジューラは、Windows サービスの有効な代替手段になりますか?

両方の方法の経験があり、両方の利点と欠点をもっとわかりやすく説明できる人はいますか?

答え1

はい、あなたのユースケースではそうですが、私の理解では、一般的にタスクスケジューラはタスクがいつかは終了することを期待しています(そして実際にはデフォルトオプションタスクが自動で終了しない場合は強制的に終了させる)この方法で実行することで、未知の任意の、あるいは少なくとも予期しない制限をテストしている可能性があります。スケジュールされたタスクを使用する場合は、別のアプリケーションを起動するためのスケジュールされたタスクもう 1 つはアプリケーションを停止 (および/または再起動) するタスクです。開始タスクを Windows の起動時に実行するようにスケジュールし、その他のタスクはリモート管理を通じて実行できます。

同等ではない領域の 1 つは、サービス依存関係です。スケジュールされたタスクを別のタスクに依存して実行するための組み込みの方法はありませんが、サービスでは可能です。もう 1 つの領域はイベント ログです。多くのアプリケーションは必要に応じて独自のログを保持し、実行するために他のアプリケーションに依存しないため、これらはどちらも使用ケースでは役に立たないと思われます。

どちらも障害後の回復/再起動のオプションがあります

サービス回復

スケジュールされたタスクの回復

どちらも起動後に遅延起動するように設定できます。

サービスの起動遅延

スケジュールされたタスクの遅延起動

答え2

Google は時々役に立つので、コメントを残すこともできますが、かなり前に同じことを実現したいと思ったことを覚えています。そのときは、Windows Server 2003 のリソース キットを使用しました。これには、サービスを作成するためのツールが含まれていました。残念ながら、そのとき使用していたものに関する情報は見つかりません*

それでも、Google 検索では多くの結果が表示されます。

1) 使用sc.exe https://support.microsoft.com/en-us/help/251192/sc-exe を使用して Windows サービスを作成する方法

https://stackoverflow.com/questions/3663331/sc-exe でサービスを作成するときにコンテキストパラメータを渡す方法

次に例を示します。

C:\Documents and Settings\Administrator> sc create asperacentral binPath= "C:\Program Files\Aspera\Enterprise Server\bin\Debug\asperacentral.exe" DisplayName= "Aspera Central" start= auto

2) 使用*svrany: これは私が使用していたツールでした。思い出しました。しかし、これはかなり古いもので、まだ動作すると思いますが (Windows 7 では動作します)、使用することはお勧めしません。

3) 使用方法srvstart.exe: https://www.rozanski.org.uk/software

少し前に聞いたが、一度も使ったことのないツール。

他にも方法はたくさんあると思いますが、私はsc.exe方法 1 を試してみたいと思います。

答え3

Windows タスク スケジューラで実行されるアプリケーションの優先度を変更するのは難しいです。ただし、サービスについてはわかりません。

関連情報