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;就产生了一种误解&#xff0c;认为 学计算机就是学各种编程语言&#xff0c;或者认为&#xff0c;学习最新的语…

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

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

Oracle CRS stack is already configured and will be running under init(1M)

REDHAT 4 重装ORACLE 10G RAC 安装完CRS后跑root.sh脚本一闪而过&#xff0c;提示CRS stack is already configured该问题可以通过root用户在每个节点上删除/etc/oracle/scls_scr/rac1/oracle/cssfatal 文件即可转载于:https://blog.51cto.com/803517/1372474

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

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

Asp.Net Core 中如何设置 IP 白名单

咨询区 MartinM&#xff1a;我想在一个web站点中实现ip白名单功能&#xff0c;在 MVC 时代我只需要在 web.config 中添加如下配置即可。<security><ipSecurity allowUnlisted"false" denyAction"NotFound"><add allowed"true" ip…

计算机专业考研末流211和双非,211大学考985研究生难吗,如何看待本科985学生读研去211学校?...

今天小编先给大家讲一下关于考研的一些事情&#xff0c;我发现很多同学对于考研还是云里雾里的&#xff0c;连考研有哪些科目都不清楚。211大学考985研究生难吗对于考研&#xff0c;小编认为选择比努力重要&#xff0c;动力很大程度决定了你的结果&#xff0c;希望通过211大学研…

失业、创业。。。

在这个经济危机的时候&#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;这就大大简化了一…

ORACLE 常用函数

好像ORACLE的资料比较少,把ORACLE的常用函数写下,以备一时忘记查看用...1.INITCAP 返回字符串并将字符串的第一个字母变为大写; SQL>selectinitcap(smith) upp fromdual;-----Smith2.CONCAT 连接两个字符串; SQL>selectconcat(010-,88888888)||转23高乾竞电话 fromdual;-…

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

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

asp.net网页上嵌入Flash显示

网页上显示Flash&#xff0c;功能实现&#xff1a; 文件格式&#xff1a;.wmv;大小&#xff1a;19,530KB;长度&#xff1a;00:27:39&#xff1b;还包含JavaScript与用户控件等文件。 下载地址&#xff1a;http://download.cnblogs.com/insus/ASPDOTNET/Flash.zip转载于:https:/…

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…

增加FiroFox3对迅雷的支持

当然&#xff0c;这对于Firefox来说是最好的了&#xff0c;以前的Thunder 扩展”Thunder Extension1.1“在firefox 2.0.0.4之后就不能用了&#xff0c;现在该扩展用的用的版本是”Thunder Extension3.5“。不用大家满世界找了&#xff0c;迅雷已经内置了。 注意&#xff1a;鉴于…

***一般如何***服务器

***方式&#xff0c;前期准备工作&#xff0c;漏洞收集&#xff0c;扫描&#xff0c;路由及网关分析&#xff0c;然后有网络编程以达到***的作用以至被***的机器瘫换.这种是具备专业知识的.一般的就是用工具了***.比如用工具发大量数据包,造成拒绝服务器***,SYN同步***.总的来说…

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

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

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

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

C#中的解构

解构是将一个对象分割成若干部分并将其存储到新的变量中。在 C# 中&#xff0c;解构可以方便地一次性将一个对象的多个成员的值存储到多个变量中。1解构元组元组为方法返回多个值提供了便捷&#xff0c;无需创建额外的类型来承载返回的值。例如&#xff0c;下面这个方法使用元组…