一个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服务。

尽管它们的目标相同,但它们在设计、配置和功能方面有所不同。

以下是两者之间一些核心差异的概述:

  1. 设计理念:
    WinSW 使用XML文件作为服务配置,由.NET框架支持,这意味着它需要.NET环境来运行。
    NSSM 则不依赖.NET框架,它是使用C++编写的,并且包含了一个用户友好的GUI进行服务配置。
  2. 配置:
    WinSW 需要一个XML配置文件,其中指定服务的详细信息,这可能对那些习惯于XML格式的用户更方便。
    NSSM 提供了一个命令行界面,用于安装、删除、启动和管理服务。它还附带了一个GUI,允许用户通过图形界面配置服务。
  3. 特性和功能:
    WinSW 支持日志记录、下载、服务失败操作等。它允许服务自我更新,也支持延迟的自动启动。
    NSSM 的特点是轻量,易于使用,也支持日志记录,可以自动重启失败的服务,并且能够处理stdout和stderr输出。
  4. 易用性:
    NSSM 因其简单的GUI而受到一些用户的青睐,允许快速安装和配置服务。
    WinSW 需要用户编辑XML文件,这可能对一些用户来说不那么直观,但对于熟悉该格式的用户则非常有用。
  5. 依赖性:
    WinSW 依赖于.NET环境,所以在没有安装.NET的系统上不能使用。
    NSSM 没有额外的依赖,它可以在所有现代Windows系统上直接运行。
  6. 社区和支持:
    WinSW 和 NSSM 都有活跃的社区,但他们的更新频率和社区支持可能会有所不同。
    在选择使用哪一个时,你需要根据你的特定需求、你的技术偏好以及你所在的环境来决定。例如,如果你已经在使用.NET环境,并且希望有一个详细的配置文件,那么WinSW可能是更好的选择。而如果你希望在没有.NET环境的系统上运行,或者你喜欢使用图形界面进行配置,那么NSSM可能更适合你。

NSSM注册服务后,后台会常驻一个NSSM的程序文件,所以我选择了使用WinSW来做这个辅助工具。

封装构想

查对了WinSW的文档,他是基于xml的配置来执行不同的命令,来处理不同的服务操作,那我们可以写个程序,来封装xml配置文件的生成和指令的执行,这样一来你处理你的服务应用就只需要双击你的辅助程序,便可以方便的启停你的应用程序,.NET8刚好可以做AOT编译的项目,那就用它来做这个工具吧,也不用安装环境了,搞起。

项目构建

新建一个控制台应用,基于.NET8 启用AOT编译

  1. 建一个model,来存储转为xml的配置文件数据

  2. 把方法都封装到一个Helper类中

    封装常用的 WinSW 命令

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

  4. 封装启动CMD的方法

  5. 最后封装指令菜单

看看运行效果

我的API项目执行文件是 Simple.WebHost.exe

  1. 双击我的辅助项目编译文件 Simple.RunService.exe 配置指令

查看1. 生成的xml文档

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

简单吧,简单的封装,配置一次,以后更新啥的,直接双击运行辅助项目输入个数字就搞定了

看看编译的辅助工具的文件 2M还行吧,不用安装环境哦 注意X64环境使用哦

点我✨Star

相关推荐
人工智能AI技术4 小时前
【C#程序员入门AI】本地大模型落地:用Ollama+C#在本地运行Llama 3/Phi-3,无需云端
人工智能·c#
MyBFuture8 小时前
C#数组详解:一维二维与交错数组
开发语言·windows·c#·visual studio·vision pro
有来技术9 小时前
ASP.NET Core 权限管理系统(RBAC)设计与实现|vue3-element-admin .NET 后端
vue.js·后端·c#·asp.net·.net
张人玉11 小时前
C#WinFrom中show和ShowDialog的区别
开发语言·microsoft·c#
m0_7482331711 小时前
C#:微软的现代编程利器
开发语言·microsoft·c#
Traced back11 小时前
SQL Server数据自动清理系统最终版(C# WinForms完整源码)
数据库·c#·.net
人工智能AI技术12 小时前
【C#程序员入门AI】Microsoft Extensions for AI (MEAI):统一LLM调用接口,告别厂商绑定
人工智能·c#
William_cl13 小时前
C# ASP.NET路由系统全解析:传统路由 vs 属性路由,避坑 + 实战一网打尽
开发语言·c#·asp.net
初九之潜龙勿用1 天前
C# 操作Word模拟解析HTML标记之背景色
开发语言·c#·word·.net·office