Heim >Backend-Entwicklung >C++ >Wie kann ich eine .NET-Konsolenanwendung als Windows-Dienst ohne separates Projekt ausführen?

Wie kann ich eine .NET-Konsolenanwendung als Windows-Dienst ohne separates Projekt ausführen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-03 13:23:41878Durchsuche

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

Führen Sie die .NET-Konsolenanwendung als Windows-Dienst ohne separates Projekt aus

In Windows sind Dienste lang laufende Prozesse, die im Hintergrund ausgeführt werden. Während herkömmliche .NET-Konsolenanwendungen interaktiv im Konsolenfenster ausgeführt werden, ist es wünschenswert, sie als Dienste für den kontinuierlichen Betrieb auszuführen.

Um diese Integration zu erreichen, ohne ein separates Dienstprojekt zu erstellen, ziehen Sie die folgende Lösung in Betracht:

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

Diese Lösung nutzt die ServiceBase-Klasse, um eine verschachtelte Serviceklasse innerhalb der Konsolenanwendung zu erstellen. Die Methoden OnStart und OnStop sind implementiert, um Dienstlebenszyklusereignisse zu verarbeiten.

Environment.UserInteractive ist standardmäßig für Konsolenanwendungen auf „true“ und für Dienste auf „false“ gesetzt. Durch die Überprüfung dieses Flags kann die Anwendung ihre Laufzeitumgebung ermitteln und die entsprechende Logik ausführen.

Alternativ können Sie Befehlszeilenschalter integrieren, um das Verhalten von Diensten oder Konsolen explizit zu steuern. Sie könnten beispielsweise einen Schalter wie „--console“ verwenden, um die Anwendung interaktiv auszuführen.

Dieser Ansatz bietet die Flexibilität, dieselbe Binärdatei sowohl als Konsolenanwendung als auch als Windows-Dienst auszuführen, was die Codewartung vereinfacht und Bereitstellung.

Das obige ist der detaillierte Inhalt vonWie kann ich eine .NET-Konsolenanwendung als Windows-Dienst ohne separates Projekt ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn