netcore一键nssm发布为windows服务

AntDeploy

是我开发一款开源一键部署工具包

功能一览:

  • docker容器一键部署

  • docker镜像一键发布

  • 支持iis一键部署

  • windows服务一键部署

  • linux服务一键部署

  • 支持增量发布

  • 支持一键回滚

  • 支持点火

  • 支持选择特定文件发布

  • 支持查看发布记录

一个issue

前两天有一个使用者给我反馈了一个issue

image

他是用asp5.0开发了一个web程序,然后用AntDeploy来部署, 由于AntDeploy部署时读取服务的安装路径,然后进行更新。但是针对nssm部署的服务有一个特点,执行路径是nssm.exe,如下图:

image

那么AntDeploy在更新部署的时候会更新到nssm.exe所在的目录了。

解决思路

nssm是一个开源c语言写的软件,大概只有300kb,可以很方便的把程序安装成一个windows服务。

nssm就像是一个服务管理器,windows服务启动的时候 会调用nssm.exe传入serviceName、然后nssm.exe会根据serviceName拿到配置的实际要运行的文件。

查了下nssm官网

可以根据命令

nssm get <serviceName> Application

获取实际要执行的程序地址

那么要想要兼容第一次是由nssm.exe部署,后面用AntDeploy发布的场景,则需要

  • 根据调用nssm的命令拿到真实路径

  • 根据真实路径进行部署

image

既然是开源软件,就让这位仁兄来帮我写这部分代码吧

image

果然这位仁兄战斗力可以,很快就搞定了

image
image
开源就是要参与进来 这也是我热爱开源的原因

扩展nssm发布windows功能

上面虽然已经解决了:首次用nssm发布,后面用AntDeploy来更新的场景。

还需要解决掉首次无法使用nssm发布的功能。

我觉得有必要加这个功能,来完成nssm发布windows服务的闭环

好处有:

一般按照微软开发winfows服务的标准的话 是需要引入包:Microsoft.Extensions.Hosting.WindowsServices但是用nssm可以不需要引入。所以在netcore开发web的场景使用nssm安装为windows服务很方便而且使用nssm安装的另外一个优点是可以指定启动参数? 比如 --urls=http://*:10007

开始开发

1. 客户端 增加入口可以使用nssm
image

2. ageng端增加 nssm

在windows场景下才 作为内嵌资源。针对linux场景不需要。

image

在启动的时候释放出来:


var nssmSavePath = Path.Combine(Startup.RootPath, "nssm.exe");
if (File.Exists(nssmSavePath))
{return;
}
Assembly assembly = typeof(AntDeployAgentWindowsService).Assembly;
using (Stream stream = assembly.GetManifestResourceStream("AntDeployAgentService.nssm.exe"))
{if (stream != null){using (var fileStream = File.Create(nssmSavePath)){stream.Seek(0, SeekOrigin.Begin);stream.CopyTo(fileStream);}}
}if (!File.Exists(nssmSavePath))
{throw new FileNotFoundException(nssmSavePath + " not found");
}

和客户端约定了2个新传参:

  • useNssm 客户端是否选择采用nssm来部署服务

  • param 服务运行的参数

agent端处理第一次用nssm部署

主要用到了下面几个命令:

nssm install <serviceName> "<实际执行文件的完整路径>"nssm set <serviceName> AppDirectory "<实际执行文件所在的目录>"nssm set <serviceName> Description "<服务的描述>"nssm set <serviceName> AppParameters "<服务运行指定的参数>"nssm start <serviceName>

封装一个方法来执行nssm命令

public static bool RunExternalExe(string projectPath, string arguments, Action<string> logger)
{Process process = null;try{if (string.IsNullOrEmpty(arguments)){throw new ArgumentException(nameof(arguments));}process = new Process();process.StartInfo.FileName = projectPath;process.StartInfo.Arguments = arguments;process.StartInfo.CreateNoWindow = true;process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;process.StartInfo.UseShellExecute = false;process.StartInfo.Verb = "runas";process.StartInfo.RedirectStandardError = true;process.StartInfo.RedirectStandardOutput = true;process.Start();process.OutputDataReceived += (sender, args) =>{if (!string.IsNullOrWhiteSpace(args.Data)){logger(args.Data);}};process.BeginOutputReadLine();process.ErrorDataReceived += (sender, data) =>{if (!string.IsNullOrWhiteSpace(data.Data)) logger(data.Data);};process.BeginErrorReadLine();process.WaitForExit();//var err = process.StandardError.ReadToEnd();return process.ExitCode == 0;}catch (Exception ex){return false;}finally{process?.Dispose();}
}

以aspnet5的web测试 完整的运行效果是:

image

服务部署成功

image

访问成功

image

成功物

插件最新版: v7.32

agent最新版:v6.9

源码地址:https://github.com/yuzd/AntDeployAgent

交流QQ群:488312978

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冒名者还是重名?疑惑中!

虽然已经算是离开存储行业了&#xff0c;但是还是偶尔去存储行业的专业中文网站瞄上几眼&#xff0c;还是很关注存储行业的发展。今天早上无意中打开Dostor([url]http://www.dostor.com[/url])&#xff0c;看到前段时间讨论的关于IBM存储价值的问题又重新归来&#xff0c;如下所…

过了双十一之后的你。。| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源 阿粪青&#xff0c;侵权删&#xff09;

失业、创业。。。

在这个经济危机的时候&#xff0c;突然遭遇失业。呵呵&#xff0c;&#xff0c;暂且不说失业的原因了。当然这样的事情可能每天多发生。在一个企业里面待的时间长了对自己的发展未必是好事。在目标我待了两年&#xff0c;突然出来以后发现自己多难以适应这外面的世界。就像井底…

Exchange server 2007 出现“0x8004010F”错误的解决办法

环境&#xff1a; 服务器&#xff1a;Exchange server 2007 客户端&#xff1a;outlook2003或outlook2007 在outlook中通过MAPI方式访问Exchange server&#xff0c;在点击"发送接收"后出现0x8004010F的错误。 -------------------------------------------------- 1…

Hello Blazor:(7)WebAssembly、Server模式你选哪种?小孩子才做选择!我用混合模式...

在上次的文章中&#xff0c;我们介绍了“Blazor WebAssembly和Blazor Server的区别”。它们各有优缺点。Blazor WebAssembly的优势在于运行期间可以和服务器无交互&#xff0c;但是需要长时间下载资源&#xff0c;而Blazor Server则首次加载速度非常快&#xff0c;但是必须和服…

一生只有43年,喜欢泡妹打架,却凭借一篇文章震惊世界,跻身一流数学家

全世界只有3.14 %的人关注了青少年数学之旅不会做就别乱套我洛必达的公式!——节选自《数学之旅 闪耀人类的54个数学家》众所周知&#xff0c;求极限是高等数学中最重要的内容之一&#xff0c;而洛必达法则将对原式的求导转化成了导函数形式的问题&#xff0c;这就大大简化了一…

计算机三级网络技术分值占比,大一能考计算机三级吗?计算机三级考试题型分析...

原标题&#xff1a;大一能考计算机三级吗&#xff1f;计算机三级考试题型分析计算机等级考试&#xff0c;很多学生在刚刚进入大学时&#xff0c;就想把计算机三级证书拿到手。那么&#xff0c;大一能考计算机三级吗&#xff1f;计算机三级考试题型有哪些&#xff1f;下面&#…

DTO 和 POCO(或 POJO)有什么区别

DTO 和 POCO&#xff08;或 POJO&#xff09;有什么区别原文链接&#xff1a;https://ardalis.com/dto-or-poco/作者&#xff1a;Ardalis Steve在讨论 .NET 和 C# 中的软件开发时经常出现的两个术语是 DTO 和 POCO。一些开发人员交替使用这些术语。那么&#xff0c;DTO 和 POCO…

Nginx server之Nginx作为反向代理服务器

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff1a;Nginx介绍 1.Nginx简介&#xff1a;nginx [engine x]是一个俄罗斯人编写的HTTP和反向代理服务器&#xff0c;另外它也可以作为邮件代理服务器。 它已经在众多流量很大的俄罗斯网站上使用了很长时间&#x…

为什么现在老师这么难,值得大家深思

致各位老师不知不觉&#xff0c;顶级教师圈已经陪伴大家走过3个月的时光。我们每天为教师们推送教育资讯&#xff0c;得到了许多关心和支持。为了感谢各位教师们的支持和鼓励&#xff0c;顶级教师圈今日特举办限时资源福利活动。我们精心整理了100G海量教学资源&#xff0c;包含…

学计算机要买什么样的电脑,大学开学要买电脑吗?又要买什么样的电脑?看准这些再买也不迟!...

电脑是我们生活中重要的通讯工具&#xff0c;方便了我们学习办公、工作设计、娱乐游戏&#xff0c;我们也越来越依赖电脑处理不同的事情&#xff0c;尤其是现在的开学季&#xff0c;很多准大学生都准备给自己购置一台电脑&#xff0c;但是由于自己不懂&#xff0c;买了怕被坑&a…

如果格局决定人生,那到底什么决定了格局

全世界只有3.14 %的人关注了青少年数学之旅真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内心的格局&#xff0c;见识的深浅决定人生的深浅&#xff0c;格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号&#xff0c;希望能够给…

海尔微型计算机一键还原怎么操作,教你电脑一键还原怎么操作

当系统使用的时间久了&#xff0c;出现了不好修复的问题&#xff0c;可使用电脑的一键还原来解决。但一些用户不知电脑一键还原怎么操作呢?其实方法并不难&#xff0c;有需要的用户&#xff0c;请来看看下面的步骤吧一键还原又叫做一键恢复&#xff0c;计算机系统出现问题时就…

我从大厂面试中学到的关于 C# 的知识

我从工作面试中学到的关于 C# 的知识原文链接&#xff1a;https://michaelscodingspot.com/what-i-learned-about-c-from-job-interviews/作者&#xff1a;Michael Shpilt我最近参加了一些最大的科技公司的一系列工作面试。在没有透露姓名的情况下&#xff0c;我得到了世界排名…

深入浅出自定义标签(二)生成javascript

自从写了深入浅出自定义标签(一)入门之后一直没有得出时间继续写,正好这次项目中用到"自定义标签",这次的用途是通过Session中的存储的相关功能点的List,进行迭代生成javascript脚本,在前台通过javascript生成树桩结构所有的页面元素都是Html,包括javascript所以生成…

曾凭一己之力推动物理学发展,是清华大学最年轻教授,世界却欠他一个诺贝尔奖!...

全世界只有3.14 %的人关注了青少年数学之旅说起中国最牛的科学家&#xff0c;大家可能都会想起钱学森。钱学森被美国称为“一个人抵五个师”并阻止他回国的故事&#xff0c;几乎家喻户晓。钱学森但事实上&#xff0c;在中国近代&#xff0c;也有一个科学大牛&#xff0c;曾被美…

SharpDeveloeper开发ASP.NET MVC汗流浃背

今天好不容易休息了一天&#xff0c;上网狂了一圈&#xff0c;突然想起了以前的一个轻量级的开发工具“SharpDeveloper”&#xff0c;于是就下载试着来开发一下ASP.NET&#xff0c;但是老魏没有想到的是&#xff0c;虽然官方提供了对ASP.NET MVC的支持&#xff0c;但是实际开发…

Vue 2升级 Vue 3初探小细节

【导读】嗯&#xff0c;偶尔看看学习Vue 3技能啦&#xff0c;此前用过Vue 2做过一点东西&#xff0c;Vue 3已面世一段时间&#xff0c;于是乎&#xff0c;我来看看所遇到的问题是否在Vue 3中得到解决首先&#xff0c;我们来讲讲一个例子在Vue 2中的实现&#xff0c;举个栗子吧&…

计算机竞赛游戏探险岛,冒险岛2五大全新团本综合分析

随着新版本的到来&#xff0c;这次推出了两个混沌团本&#xff0c;分别是影子军团祭坛、月光船长要塞。三个10人新团本&#xff0c;分别是迷宫集会堂、路贝里斯克、不灭神殿。混沌团本可以掉落橙装&#xff0c;新团本则可以掉落专属武器。影子军团祭坛是我们的两大混沌本之一&a…

薛定谔的猫——.NET 4.1 中的新基类,开源Preview中

前言&#xff1a; 昨天一如既往地登上forums.asp.net答帖子&#xff0c;却被上面的一条滚动新闻雷到了&#xff1a; .NET 4.1 Preview - New Base Class Library (BCL) Extension Methods - RFC 因为考虑到April 1st的关系&#xff0c;这是Scott Hanselman给大家开的玩笑&…