首页 > 后端开发 > C++ > 如何在没有单独项目的情况下将 .NET 控制台应用程序作为 Windows 服务运行?

如何在没有单独项目的情况下将 .NET 控制台应用程序作为 Windows 服务运行?

Barbara Streisand
发布: 2025-01-03 13:23:41
原创
880 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板