Maison >développement back-end >C++ >Comment puis-je exécuter une application console .NET en tant que service Windows sans projet distinct ?

Comment puis-je exécuter une application console .NET en tant que service Windows sans projet distinct ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-03 13:23:41879parcourir

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

Exécuter l'application console .NET en tant que service Windows sans projet séparé

Dans Windows, les services sont des processus de longue durée qui fonctionnent en arrière-plan. Alors que les applications de console .NET traditionnelles s'exécutent de manière interactive dans la fenêtre de la console, il est souhaitable de les exécuter en tant que services pour un fonctionnement continu.

Pour réaliser cette intégration sans créer de projet de service distinct, envisagez la solution suivante :

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
    }
}

Cette solution utilise la classe ServiceBase pour créer une classe de service imbriquée dans l'application console. Les méthodes OnStart et OnStop sont implémentées pour gérer les événements du cycle de vie des services.

Environment.UserInteractive est défini par défaut sur true pour les applications console et false pour les services. En cochant cet indicateur, l'application peut déterminer son environnement d'exécution et exécuter la logique appropriée.

Vous pouvez également incorporer des commutateurs de ligne de commande pour contrôler explicitement le comportement du service ou de la console. Par exemple, vous pouvez utiliser un commutateur tel que "--console" pour exécuter l'application de manière interactive.

Cette approche offre la flexibilité nécessaire pour exécuter le même binaire en tant qu'application console et en tant que service Windows, simplifiant ainsi la maintenance du code et déploiement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn