C#创建控制台项目引用Topshelf的方式,部署windows服务。
上一篇是直接创建windows service服务来处理需求。调试可能会麻烦一点。把里面的逻辑写好了。然后受大神指点,用Topshelf会更好一些。
来公司面试的时候问我,为什么要用stringbuilder,领导说,我平时用string拼字符串也挺好的呀。
我那时候潜意识就是觉得学会加减法都是为了乘除法做准备的。实际上应该是stringbuilder效率会高一些吧。
引用Topshelf的优势就是方便调试吧。因为你运行起来就是控制台界面。
而且命名直接在.cs中就可以了。不需要在windows service的属性中对应改一些配置吧。个人心得。
【开始简单介绍一下使用方法】
1.新建一个控制台项目,只需要引用Topshelf.dll即可,为了日志输出显示,建议也引用Topshelf.Log4net.
Visual Studio 点工具——>NuGet包管理器——>点程序包管理控制台
程序安装命令:
Install-Package Topshelf
Install-Package Topshelf.Log4Net
2.Program中Main()方法
/// <summary>
/// 应用程序的主入口点。
/// </summary>
private static void Main()
{
HostFactory.Run(conf =>
{
conf.Service<AutoCancelService>(service =>
{
service.ConstructUsing(name => new AutoCancelService());
service.WhenStarted(tc => tc.OnStart());
service.WhenStopped(tc => tc.OnStop());
}); conf.RunAsLocalSystem(); conf.SetDescription("自动取消XXX"); //服务的描述
conf.SetDisplayName("Auto dosomesthing Service");
conf.SetServiceName("Auto dosomesthing Service");
conf.StartAutomatically(); // Start the service automatically 自动模式 });
}
然后对应建立AutoCancelService类,来写逻辑代码。注意类中一定要对应有OnStart()和 OnStop()方法,不然会报错:Lamdba表达式没有返回值之类的。
public class AutoCancelService
{ public void OnStart()
{
this.WriteLog("自动取消服务:【服务开启】");
//在这里写逻辑代码
} public void OnStop()
{
this.WriteLog("自动取消服务:【服务关闭】");
}
}
运行起来的界面是这样的
【关于部署】
用管理员权限打开Cmd,定位到程序所在目录:
安装:
ProductDownloadService.exe install
卸载:
ProductDownloadService.exe uninstall
【例如】
1.C盘下新建WindowService文件夹,将最新生辰的Debug内容拷贝到该文件夹。
2.管理员运行CMD
3.命令在C:\盘符下执行
【回退上级文件夹】
CD..
【安装命令】
WindowService\ProductDownloadService.exe install
【卸载命令】
WindowService\ProductDownloadService.exe uninstall
目前我自动执行用timer,还可以用cron表达式,更灵活。等我学会再写一篇详细介绍。
如果看完对你有帮助可以留言,告诉我一下。我写了这么久博客,初衷只是为了帮自己记录知识。常来博客园感受氛围,受熏陶。
从前我手机浏览器主页是新闻,现在我换成博客园主页了,公交车上随手打开可能就看到哪个知识点会被吸引,肯定是要比阅读一些垃圾新闻更有用。
我只是要求自己保证每个月记录一篇有趣的内容就好了,最近感觉学到了很多知识,如果可以的话,我多整理一些文档。
路过的大神朋友希望多鼓励,多指点,路过的新手朋友希望对你有帮助。
C#创建控制台项目引用Topshelf的方式,部署windows服务。的更多相关文章
- Topshelf+Quartz3.0基于控制台应用程序快速开发可调度windows服务
1.TopShelf TopShelf是一个开源的跨平台的宿主服务框架.可通过.Net Core/.Net Framwork控制台应用程序快速开发windows服务,更加便于服务调试. 本文基于.Ne ...
- Python环境搭建、python项目以docker镜像方式部署到Linux
Python环境搭建.python项目以docker镜像方式部署到Linux 本文的项目是用Python写的,记录了生成docker镜像,然后整个项目在Linux跑起来的过程: 原文链接:https: ...
- netcore项目在Windows部署:使用NSSM部署Windows服务
NSSM部署Windows服务 1 准备工作 在Windows平台部署Asp.net core应用程序一般采用IIS,但是如果我们的net core应用执行的是定时任务,需要开机自启,稳定运行的话,使 ...
- topshelf包装redis为windows服务
topshelf包装redis为windows服务 Redis服务端目前用的是控制台程序运行,部署的时候能作为windows服务后台运行感觉更好.找到一篇文章Running Redis as a Wi ...
- .Net Core 项目引用本地类库方式(一)
最近了解到.NET Core 项目,引用本地类库DLL的方式有三种 1.非同解决方案下的引用,直接引用,浏览,找到对应的DLL,然后确定引用. 这种方式有个不好的地方就是,如果引用的DLL文件里面,也 ...
- Intellij IDEA 创建控制台项目,断点调试
在idea 2016中创建一个控制台项目(经常会忘) 打开创建界面 注意,什么都不要选,点击next(最坑的地方,经常忘) 再次点击next ============================= ...
- 用Eclipse+ADT创建可运行项目,创建lib项目,引用一个lib项目
Managing Projects from Eclipse with ADT In this document Creating an Android Project 创建可运行项目 Settin ...
- Intellij IDEA 创建控制台项目,断点调试快捷方式
在idea 2016中创建一个控制台项目(经常会忘) 打开创建界面 注意,什么都不要选,点击next(最坑的地方,经常忘) 再次点击next ============================= ...
- .Net Core 项目引用本地类库方式(二)
上篇文章有详细的介绍.Net Core 项目中引用本地类库通过打包,然后Nugety引用方式,这里再介绍一种引用包的方式
随机推荐
- C# 如何使用配置文件保存应用程序里的配置数据
引言 我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格式的序列化来保存应用程序配置.这样每次都要建立单独的配置类,并书写读写配置 ...
- git 解决多人修改相同的文件导致的冲突
git冲突处理 (场景:A和B修改相同的文件,A先提交到远程仓库,然后B提交push报错,远程仓库有更改,git自动合并失败,需要手动合并 提示错误:Automatic merge faile ...
- 文件实时同步(rsync+inotify)
目标服务器:10.11.6.11 源服务器:10.11.6.12 准备条件: 1.关闭selinux: vi /etc/selinux/config #编辑防火墙配置文件 #SELINUX=enfor ...
- 开发过程中,ps要做的事情
修改图片的分片率 把背景改为透明的 把一个图片的颜色要一下
- 【微信小程序】rpx尺寸单位的应用
前言:微信小程序中的rpx尺寸单位用起来很方便.他是怎么实现计算的呢?(这里要注意的是,常规浏览器解析css代码的时候会把font-size小于12px的字体转成12px,不会让他小于12px的,而微 ...
- jquery笔记整理
01-jquery简介 1)功能: ·html元素选取 ·Html元素操作 ·Css操作 ·Html事件函数 ·JavaScript特效和动画 ·DOM ...
- Android Connection refused
遇到 Connection refused的错误. AndroidManifest.xml 文件中添加: //网络权限 <uses-permission android:name=" ...
- 使用sshpass同时更新一台ubuntu和一台CentOS
1.在ubuntu上安装sshpass sudo apt install sshpass 2.分别在两台的root路径下放上升级脚本: cent:/root/upgrade.sh #!/bin/bas ...
- AT2369 Ants on a Circle (思路)
考虑到蚂蚁们的相对位置不会变化,而且,如果把“相遇后掉头”看作是“相遇后交换编号”的话,也可以得出来最后都有哪些位置有蚂蚁 然后,只要确定哪个位置是“1”就可以了 然后搞一个指针p代表原来第一个位置的 ...
- 为什么天线的回波损耗以-10dB大小来衡量?
传送门:http://www.eeworld.com.cn/Test_and_measurement/2014/0610/article_9152.html i:对于2端口无损耗网络,可以根据S11的 ...