首頁 >後端開發 >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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn