ホームページ >バックエンド開発 >C++ >別のプロジェクトを使用せずに .NET コンソール アプリケーションを Windows サービスとして実行するにはどうすればよいですか?

別のプロジェクトを使用せずに .NET コンソール アプリケーションを Windows サービスとして実行するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-03 13:23:41879ブラウズ

How Can I Run a .NET Console Application as a Windows Service Without a Separate Project?

プロジェクトを分割せずに .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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。