You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.WindowsServices NuGet包
  • 改造项目的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:48:04