一个NET8 AOT编译的辅助项目,让你的任何可执行应用快速部署为服务
不知道大家有没有和小编一样,很多时候想将自己的一些应用转为服务运行,比如一些控制台应用或者.NET Core应用,但是又不想重新编码,把他们转为服务,本文将给大家提供些我使用过的方法,并提供一个基于NET8 AOT编译的辅助项目的封装工具构建方法,快来看看吧。点我Star
我的快速开发框架项目
先介绍下我的基于.NET 8的快速开发框架Simple Framework,旨在简化开发流程,减少学习成本。框架特点包括基于.NET 8、少用第三方库、基本授权鉴权、CRUD实现和后台管理前端。规划使用了NLog、Redis、Json库等,并支持多数据库结构。框架包含基础库、Web项目扩展库、EFCore扩展库、代码生成器和定时任务模块,并提供了一套基于vue2 elementui前端页面框架,以提高开发效率和灵活性,发布以来收到了很多朋友的喜欢,本文的封装工具也是朋友的建议下撸出来的,快去看看吧。
把应用封装为服务的常用方式 WinSW 和 NSSM
WinSW(Windows Service Wrapper)和 NSSM(Non-Sucking Service Manager)都是流行的开源工具,用于将任何可执行文件包装为Windows服务。
尽管它们的目标相同,但它们在设计、配置和功能方面有所不同。
以下是两者之间一些核心差异的概述:
- 设计理念:
WinSW 使用XML文件作为服务配置,由.NET框架支持,这意味着它需要.NET环境来运行。
NSSM 则不依赖.NET框架,它是使用C++编写的,并且包含了一个用户友好的GUI进行服务配置。 - 配置:
WinSW 需要一个XML配置文件,其中指定服务的详细信息,这可能对那些习惯于XML格式的用户更方便。
NSSM 提供了一个命令行界面,用于安装、删除、启动和管理服务。它还附带了一个GUI,允许用户通过图形界面配置服务。 - 特性和功能:
WinSW 支持日志记录、下载、服务失败操作等。它允许服务自我更新,也支持延迟的自动启动。
NSSM 的特点是轻量,易于使用,也支持日志记录,可以自动重启失败的服务,并且能够处理stdout和stderr输出。 - 易用性:
NSSM 因其简单的GUI而受到一些用户的青睐,允许快速安装和配置服务。
WinSW 需要用户编辑XML文件,这可能对一些用户来说不那么直观,但对于熟悉该格式的用户则非常有用。 - 依赖性:
WinSW 依赖于.NET环境,所以在没有安装.NET的系统上不能使用。
NSSM 没有额外的依赖,它可以在所有现代Windows系统上直接运行。 - 社区和支持:
WinSW 和 NSSM 都有活跃的社区,但他们的更新频率和社区支持可能会有所不同。
在选择使用哪一个时,你需要根据你的特定需求、你的技术偏好以及你所在的环境来决定。例如,如果你已经在使用.NET环境,并且希望有一个详细的配置文件,那么WinSW可能是更好的选择。而如果你希望在没有.NET环境的系统上运行,或者你喜欢使用图形界面进行配置,那么NSSM可能更适合你。
NSSM注册服务后,后台会常驻一个NSSM的程序文件,所以我选择了使用WinSW来做这个辅助工具。
封装构想
查对了WinSW的文档,他是基于xml的配置来执行不同的命令,来处理不同的服务操作,那我们可以写个程序,来封装xml配置文件的生成和指令的执行,这样一来你处理你的服务应用就只需要双击你的辅助程序,便可以方便的启停你的应用程序,.NET8刚好可以做AOT编译的项目,那就用它来做这个工具吧,也不用安装环境了,搞起。
项目构建
新建一个控制台应用,基于.NET8 启用AOT编译
建一个model,来存储转为xml的配置文件数据

把方法都封装到一个Helper类中
封装常用的 WinSW 命令

封装检查、读取、生成配置文件的方法

封装启动CMD的方法

最后封装指令菜单

看看运行效果
我的API项目执行文件是 Simple.WebHost.exe
- 双击我的辅助项目编译文件 Simple.RunService.exe 配置指令

查看1. 生成的xml文档

小试一刀1. ,注册并启动服务

简单吧,简单的封装,配置一次,以后更新啥的,直接双击运行辅助项目输入个数字就搞定了
看看编译的辅助工具的文件 2M还行吧,不用安装环境哦 注意X64环境使用哦

一个NET8 AOT编译的辅助项目,让你的任何可执行应用快速部署为服务的更多相关文章
- ios-实现项目在开发、测试、正式环境快速部署
快速部署:简单的来说,就是不用更改开发.测试.正式环境下的 url ,来实现在同一台测试手机快速部署三种项目状态. Bundle ID一样只会出现一个app:不一样会出现三个app: 具体步骤: 一. ...
- .Net Core 商城微服务项目系列(十二):使用k8s部署商城服务
一.简介 本篇我们将会把商城的服务部署到k8s中,同时变化的还有以下两个地方: 1.不再使用Consul做服务的注册和发现,转而使用k8s-dns来实现. 2.不再使用Ocelot作为业务网关,使用T ...
- 往android主项目中添加辅助项目
一个较大的工程往往需要多个项目组成,便于更好的并行开发和管理,但最后还是要合到一起来发布.那如何往主项目里添加其他辅助项目呢? 通常的做法是将辅助项目打包成jar包,像库一样导入到主项目,但是如果我们 ...
- 知乎问题之:.NET AOT编译后能替代C++吗?
标题上的Native库是指:Native分为静态库( 作者:nscript链接:https://www.zhihu.com/question/536903224/answer/2522626086 ( ...
- dotnet7 aot编译实战
0 起因 这段日子看到dotnet7-rc1发布,我对NativeAot功能比较感兴趣,如果aot成功,这意味了我们的dotnet程序在防破解的上直接指数级提高.我随手使用asp.netcore-7. ...
- 【菜鸟玩Linux开发】在Linux中使用VS Code编译调试C++项目
最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS Code在Linux下的安装这里就不提了,不管是CentO ...
- 【转载】在Linux中使用VS Code编译调试C++项目
原文:在Linux中使用VS Code编译调试C++项目 最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS ...
- 在Linux中使用VS Code编译调试C++项目
最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS Code在Linux下的安装这里就不提了,不管是CentO ...
- 使用Maven将Hadoop2.2.0源码编译成Eclipse项目
编译环境: OS:RHEL 6.3 x64 Maven:3.2.1 Eclipse:Juno SR2 Linux x64 libprotoc:2.5.0 JDK:1.7.0_51 x64 步骤: 1. ...
- 项目androidAnt编译打包Android项目
时间紧张,先记一笔,后续优化与完善. Ant编译打包Android项目 在Eclipse中对Android项目停止编译和打包如果项目比较大的话会比较慢,所以改为Ant工具来停止编译和打包 Ant环境配 ...
随机推荐
- 部署安装maven和mvnd
前言 maven是常见的java构建工具,优点是稳定可靠,缺点是构建太慢,maven-mvnd是maven的强化版,致力于提高构建速度,默认情况下,mvnd 使用多核CPU并行构建. 常见的java构 ...
- 解决WSL执行systemctl命令报错:Failed to get D-Bus connection
问题描述 笔者通过WSL安装了CentOS7系统,刚开始一切都很顺利.当执行systemctl命令时,却意外报错:Failed to get D-Bus connection: Operation n ...
- React-Chat移动端聊天实例|react18 hooks仿微信App聊天界面
基于react18+react-vant+zustand仿微信手机端聊天室ReactChat. react18-chat 一款使用最新react18.x hooks.zustand搭配react-va ...
- python机器学习经典算法代码示例及思维导图(数学建模必备)
最近几天学习了机器学习经典算法,通过此次学习入门了机器学习,并将经典算法的代码实现并记录下来,方便后续查找与使用. 这次记录主要分为两部分:第一部分是机器学习思维导图,以框架的形式描述机器学习开发流程 ...
- CVE-2022-42475-FortiGate-SSLVPN HeapOverflow 学习记录
前言 之前就想复现这个洞,不过因为环境的问题迟迟没有开工.巧在前一阵子有个师傅来找我讨论劫持 ssl结构体中函数指针时如何确定堆溢出的偏移,同时还他把搭建好了的环境发给了我,因此才有了此文. 如何劫持 ...
- [ABC150F] Xor Shift
2023-03-10 题目 题目传送门 翻译 翻译 难度&重要性(1~10):6 题目来源 AtCoder 题目算法 KMP,Z函数 解题思路 首先是按位确定,令 \(t(i,j)\) 表示 ...
- 03.前后端分离中台框架 zhontai 项目代码生成器的使用
zhontai 项目 基于 .Net7.x + Vue 等技术的前后端分离后台权限管理系统,想你所想的开发理念,希望减少工作量,帮助大家实现快速开发 后端地址:https://github.com/z ...
- C++笔记(自用)
<Effective C++> 条款11 在operator=中处理"自我赋值" 自我赋值 证同测试: if(this==&rhs)return*this; 影 ...
- QA|Pycharm中的git分支提交冲突问题和解决|GIT
前天,Pycharm中的git分支提交冲突了,原因是我PC上改了文件没有提交,笔记本又本地改代码,笔记本提交时就出现报错:提交拒绝,但pull也被拒绝,网上试了rebase等方法,均没得到解决,最终自 ...
- 杰哥教你面试之一百问系列:java集合
目录 1. 什么是Java集合?请简要介绍一下集合框架. 2. Java集合框架主要分为哪几种类型? 3. 什么是迭代器(Iterator)?它的作用是什么? 4. ArrayList和LinkedL ...