NET5中找不到ServiceProcessInstaller类?Windows服务安装替代方案是什么
关于API移植问题
你提到的Installer、ServiceInstaller、ServiceProcessInstaller均为.NET Framework专属API,微软官方没有计划将其移植到.NET Core/.NET 5及更高版本中,因此在.NET 5+项目中无法找到这些类。
官方推荐替代方案
目前.NET跨平台版本的Windows服务开发统一使用Microsoft.Extensions.Hosting.WindowsServices库实现,具体开发、安装流程如下:
- 首先在项目中安装
Microsoft.Extensions.Hosting.WindowsServicesNuGet包 - 改造项目的Host构建逻辑,添加
UseWindowsService()配置即可完成服务适配,无需再定义继承自Installer的安装类
服务安装/卸载方式
不再需要使用InstallUtil.exe工具,直接使用Windows系统自带的sc命令即可完成操作,注意sc命令语法要求等号后必须保留空格:
- 安装服务:
sc create MyApp binPath= "你的程序完整路径.exe" start= auto DisplayName= "MyApp" obj= LocalSystem - 启动服务:
sc start MyApp - 停止服务:
sc stop MyApp - 卸载服务:
sc delete MyApp
示例代码
以下是等价于你原有逻辑的.NET 5+实现代码:
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace MyApp { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices(services => { // 注册你的后台业务服务 services.AddHostedService<MyBusinessWorker>(); }) // 配置Windows服务参数 .UseWindowsService(options => { options.ServiceName = "MyApp"; }); } // 后台业务逻辑实现类 public class MyBusinessWorker : BackgroundService { private readonly ILogger<MyBusinessWorker> _logger; public MyBusinessWorker(ILogger<MyBusinessWorker> logger) { _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { _logger.LogInformation("MyApp服务已启动"); while (!stoppingToken.IsCancellationRequested) { // 此处写入你的业务执行逻辑 await Task.Delay(1000, stoppingToken); } _logger.LogInformation("MyApp服务已停止"); } } }
如果需要实现自安装逻辑,只需要在程序入口处添加命令行参数判断,检测到/install、/uninstall等参数时,调用sc命令或者Windows原生服务API执行对应操作即可。
内容的提问来源于stack exchange,提问作者Guga Coder
相关产品推荐
相关产品推荐

