プロジェクトを分割せずに .NET コンソール アプリケーションを Windows サービスとして実行する
Windows では、サービスはバックグラウンドで動作する長時間実行プロセスです。従来の .NET コンソール アプリケーションはコンソール ウィンドウで対話的に実行されますが、継続的な操作のためにサービスとして実行することが望ましいです。
別のサービス プロジェクトを作成せずにこの統合を実現するには、次のソリューションを検討してください。
using System.ServiceProcess; public static class Program { #region Nested classes to support running as service public const string ServiceName = "MyService"; public class Service : ServiceBase { public Service() { ServiceName = Program.ServiceName; } protected override void OnStart(string[] args) { Program.Start(args); } protected override void OnStop() { Program.Stop(); } } #endregion static void Main(string[] args) { if (!Environment.UserInteractive) // running as service using (var service = new Service()) ServiceBase.Run(service); else { // running as console app Start(args); Console.WriteLine("Press any key to stop..."); Console.ReadKey(true); Stop(); } } private static void Start(string[] args) { // onstart code here } private static void Stop() { // onstop code here } }
このソリューションでは、ServiceBase クラスを利用して、コンソール アプリケーション内にネストされたサービス クラスを作成します。 OnStart メソッドと OnStop メソッドは、サービスのライフサイクル イベントを処理するために実装されています。
Environment.UserInteractive は、デフォルトでコンソール アプリケーションの場合は true、サービスの場合は false に設定されます。このフラグをチェックすることで、アプリケーションはランタイム環境を判断し、適切なロジックを実行できます。
あるいは、コマンドライン スイッチを組み込んで、サービスまたはコンソールの動作を明示的に制御することもできます。たとえば、「--console」のようなスイッチを使用してアプリケーションを対話的に実行できます。
このアプローチにより、同じバイナリをコンソール アプリケーションと Windows サービスの両方として実行できる柔軟性が得られ、コードのメンテナンスが簡素化され、導入。
以上が別のプロジェクトを使用せずに .NET コンソール アプリケーションを Windows サービスとして実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。