推荐一款将控制台程序部署到Windows服务的组件
|
在日常开发中,有时候需要将我们的程序随着操作系统一起运行,并且无需人工干预。要实现这种效果,有很多种方法,比如:如果是桌面程序,可以设置到程序的启动项;如果是Web程序,还可以托管到IIS中,而对于控制台程序,最常见在做法是将程序部署成Windows服务,并设置成自动运行,这样当操作系统开机时,就会自动启动。在.NET程序中,如何将控制台程序,部署成Windows服务中呢?本文以一个简单的小例,简述如何利用一款第三方插件(Topshelf)将控制台程序部署成Windows服务的相关方法及步骤。
什么是Topshelf?
Topshelf是一款开源的用于托管.NET编写的应用程序到Windows服务的框架,通过Topshelf,可以非常方便的将普通控制台应用程序,转换成Winodw服务,并注册到Windows服务控制管理器(SCM)中。
示例说明
Windows服务一般都是周期性重复运行的,并不会停止。在本示例中,主要是为了演示创建Windows服务的方法及功能框架,实现功能是每隔一秒钟,输入一段话到日志文件中,以便于查看。
创建控制台应用程序
首先创建一个控制台应用程序,以及一个普通的类(AppService),此类包含Start和Stop方法,以及Work方法,具备一个服务的基本功能。如下所示: 其中服务名称和描述信息,在配置文件(App.config)中,方便修改。- using System;
- using System.Collections.Generic;
- using System.Configuration;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Topshelf;
- namespace DemoWinService
- {
- internal class Program
- {
- public static void Main(string[] args)
- {
- var rc = HostFactory.Run(x =>
- {
- x.Service<AppService>(s =>
- {
- s.ConstructUsing(name => new AppService());
- s.WhenStarted(tc => tc.Start());
- s.WhenStopped(tc => tc.Stop());
- });
- x.RunAsLocalSystem();
- x.StartAutomatically();
- x.SetDescription(ConfigurationManager.AppSettings["Description"]);
- x.SetDisplayName(ConfigurationManager.AppSettings["DisplayName"]);
- x.SetServiceName(ConfigurationManager.AppSettings["ServiceName"]);
- });
- var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode());
- Environment.ExitCode = exitCode;
- }
- }
- }
复制代码
服务安装
当程序开发完成后,将编译后的程序放置在服务器上指定的目录,然后【以管理员运行】打开命令行窗口,找到程序目录,通过以下命令进行安装:- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <appSettings>
- <add key="Description" value="测试Windows服务"/>
- <add key="ServiceName" value="DemoWinService"/>
- <add key="DisplayName" value="DemoWinService"/>
- </appSettings>
- </configuration>
复制代码 示例如下所示:
启动停止服务
安装成功后,即可在Windows服务管理器中,进行启动或者停止 ,如下所示:
程序输出日志,表示服务正常运行:
服务卸载
当服务不再使用时,可以通过如下命令卸载服务:
示例如下所示:
Topshelf源码
Topshelf是一款开源框架,其源码是托管到Github中,如下所示:GitHub源码:https://github.com/Topshelf/Topshelf
以上就是【推荐一款将控制台程序部署到Windows服务的组件】的全部内容,希望可以抛砖引玉,一起学习,共同进步。
来源:https://www.cnblogs.com/hsiang/p/18317307
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|
|
|
发表于 2024-7-23 17:52:03
举报
回复
分享
|
|
|
|