.Net Core框架创建一个Windows服务类型的应用程序

news/2024/12/22 13:44:35/

在NuGet中的包管理中添加两个包

System.ServiceProcess.ServiceController

Microsoft.Extensions.Hosting.WindowsServices

在Program.cs中添加.UseWindowsService(),另外还需要设置管理员身份运行

Program.cs代码如下

public class Program
{public static void Main(string[] args){var identity = WindowsIdentity.GetCurrent();var principal = new WindowsPrincipal(identity);if (principal.IsInRole(WindowsBuiltInRole.Administrator)) //必须是管理员身份运行{CreateHostBuilder(args).Build().Run();}}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).UseWindowsService().ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});
}

以上步骤完成后,就可以通过以下几种方式启动这个Windows服务

  • 通过CMD命令启动
  • 通过一个.exe应用程序启动这个服务

以下列出的是通过CMD命令启动

1.CMD找到用于系统自动的用于启动Windows服务的工具
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 2.目录为你需要启动的Windows服务的程序(此命令是为了安装服务)
InstallUtil.exe "D:\Process.Manage.Service\bin\Debug\Process.Manage.Service.exe"3.启动这个服务(MyServive为服务名称)
net start MyServive4.停止服务(如果需要停止)
net stop MyServive5.卸载服务(如果需要卸载)
InstallUtil.exe /u "D:\Process.Manage.Service\bin\Debug\Process.Manage.Service.exe"

以下列出的是通过创建一个.exe应用程序,让后把这个应用程序放在.net Core程序目录中即可,下面是启动服务的详细代码

using System;
using System.Collections;
using System.Configuration.Install;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Threading;namespace Install
{internal class Program{private static readonly string ServiceName = "Service";private static readonly string ServicePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Service.exe");private static void Consoler(string message){string date = System.DateTime.Now.ToString("HH:mm:ss,fff");System.Console.WriteLine($"{date} {message}");}static void Main(string[] args){try{if (IsExist(ServiceName)){Consoler($"检测到服务已安装。{ServicePath}");}else if (File.Exists(ServicePath)){//InstallService(ServicePath);Install(ServicePath);}else{throw new Exception($"指定文件不存在。{ServicePath}");}StartService(ServiceName);Consoler("操作已成功完成,3秒后窗口自动关闭……");Thread.Sleep(3000);}catch (Exception ex){Consoler($"服务安装失败!Error:{ex.Message}");Console.ReadKey(true);}}private static void Install(string servicePath){try{string createCommand = $"sc create \"{ServiceName}\" binPath= \"{servicePath}\" start= auto obj= \"LocalSystem\"";ExecuteCommand(createCommand);}catch (Exception err){Console.WriteLine(err.Message);}}private static void ExecuteCommand(string command){ProcessStartInfo startInfo = new ProcessStartInfo{FileName = "cmd.exe",Arguments = $"/c {command}",RedirectStandardOutput = true,RedirectStandardError = true,UseShellExecute = false,CreateNoWindow = true};using (Process process = new Process()){process.StartInfo = startInfo;process.Start();string output = process.StandardOutput.ReadToEnd();string error = process.StandardError.ReadToEnd();process.WaitForExit();}}/// <summary>/// 安装服务/// </summary>/// <param name="servicePath"></param>private static void InstallService(string servicePath){try{using (AssemblyInstaller installer = new AssemblyInstaller()){installer.UseNewContext = true;installer.Path = servicePath;IDictionary savedState = new Hashtable();installer.Install(savedState);installer.Commit(savedState);Consoler("安装服务成功");}}catch (Exception err){Consoler(err.Message);}}/// <summary>/// 启动服务/// </summary>/// <param name="serviceName"></param>private static void StartService(string serviceName){using (ServiceController service = new ServiceController(serviceName)){if (service.Status != ServiceControllerStatus.Running){service.Start();service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(3));}Consoler("服务启动成功");}}private static bool IsExist(string serviceName){ServiceController[] services = ServiceController.GetServices();var list = services.Select(s => s.ServiceName).ToList();foreach (ServiceController sc in services){if (sc.ServiceName.ToLower() == serviceName.ToLower()){return true;}}return false;}}
}


http://www.ppmy.cn/news/1557200.html

相关文章

YOLOv8目标检测(七)_AB压力测试

YOLOv8目标检测(一)_检测流程梳理&#xff1a;YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客 YOLOv8目标检测(二)_准备数据集&#xff1a;YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客 YOLOv8目标检测(三)_训练模型&#xff1a;YOLOv8目标检测(三)_训…

wepack如何进行性能优化

Webpack 是一个模块打包工具&#xff0c;可以将多个模块打包成一个或多个文件。在进行性能优化时&#xff0c;可以从以下几个方面入手&#xff1a; 减少打包文件的体积&#xff1a;可以通过代码压缩、去除无用代码、按需加载等方式来减少打包文件的体积。可以使用 UglifyJSPlug…

基础电路的学习

1、戴维南定理 ①左边的图可简化为一个电阻&#xff0b;一个电压源。② ③电压源可相当于开路。将R2移到左边&#xff0c;R1和R2相当于并联。RR1//R2 Rx和Rt相等时&#xff0c;灵敏度最大&#xff0c;因此使Rt10K。 104电容是0.1uf。 三位数字的前两位数字为标称容量的有效数…

1. JasperSoft介绍与安装

Jaspersoft介绍 Jaspersoft是一款开源的&#xff0c;强大灵活并且使用广泛的报表软件。能够展示丰富的页面内容&#xff0c;并将之转换成PDF、HTML或者XML格式&#xff0c;该库完全由Java写出&#xff0c;可以用于在各种Java应用程序&#xff0c;非常适合Java开发者用来做报表生…

科技查新对专利申请有什么帮助?

科技查新对专利申请的帮助主要体现在以下几个方面&#xff1a; 避免重复申请&#xff1a;在申请专利之前进行科技查新&#xff0c;可以帮助申请人了解所申请的技术或发明是否已经被他人申请或公开&#xff0c;从而避免因重复申请而导致的专利无效。这有助于节省申请费用和时间…

Python-装饰器(Decorator)详解

在python中&#xff0c;函数是一等公民&#xff0c;意味着函数可以像其他对象一样被赋值、传递参数、作为返回值等。装饰器的基本语法是使用符号将一个函数作为参数传递给另一个函数&#xff08;即装饰器&#xff09;。被装饰的函数在被调用时&#xff0c;实际上会执行装饰器函…

自动生成发票数据并存入Excel

自动生成发票数据并存入Excel 目录 简介环境准备代码拆分与详细解释 导入依赖库初始化Faker对象生成随机发票信息保存发票信息到Excel文件流程执行 运行效果注意事项 简介 在处理财务数据时&#xff0c;生成和管理发票是一项常见的任务。本文将指导你如何使用 Python 生成一…

【D04】网络安全基本命令

网络安全基本命令 想学会网络安全,就必须学会基本的网络常用命令,才能更好的去掌握网络,保护自己的系统&#xff0c;防止入侵。我们必须学会的基本的网络命令主要是基于Windows NT平台下的基本命令&#xff0c;也就是说windows 98/windows ME的下部分命令是不能运行的。所以说&…