首页 > 系统相关 >使用WinSW将jar创建成Windows服务;使用Microsoft.Extensions.Hosting.WindowsServices将.net转换成Windows服务

使用WinSW将jar创建成Windows服务;使用Microsoft.Extensions.Hosting.WindowsServices将.net转换成Windows服务

时间:2023-12-20 14:11:06浏览次数:42  
标签:服务 service Windows work jar Hosting using

【背景】我们有几个历史产品,需要部署在Windows系统上,产品有jar包,也有.net工程,为了优美的启动服务,思考了两种处理方式。

  第一种是电脑开机启动,将启动命令设置为快捷键,并将快捷键拷贝到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup目录下,该方式有个缺点,由于jar包启动方式都是使用javaw启动,当一个windows中有多个jar包已这种方式开机启动,在进程中无法区分是哪个服务,导致更包时需要全部重启。

  第二种是将后台软件部署成windows服务,本文以真实的案例指导实现方式,参考:使用WinSW将nacos安装为windows服务;参考:使用.NET Core创建Windows服务详细步骤

 

 

【实践1】使用WinSW将jar创建成Windows服务

关键要素:

序号

模块

文件名

描述

1

work-service

work-install.bat

安装服务

2

work-uninstall.bat

删除服务

3

work-service.exe

Winsw服务(将winsw服务修改便于识别)

4

work-service.xml

服务配置

1、下载WinSW:https://github.com/winsw/winsw/releases,下载版本:WinSW v2.12.0->WinSW-x64.exe,17.4MB

2、准备配置,将以下四个文件与jar放在同一个目录下

(1)WinSW-x64.exe修改为work-service.exe,即以系统服务命名

(2)新建服务配置文件:work-service.xml

<service>
    <id>work-service</id>
    <name>work-service</name>
    <description>work服务</description>
    <executable>java</executable>
    <arguments>-server -Xms1024m -Xmx1024m -XX:PermSize=256m -XX:SurvivorRatio=2 -XX:+UseParallelGC -jar .\work.jar --spring.config.location=application.yml</arguments>
    <logpath>logs</logpath>
    <startmode>Automatic</startmode>
</service>

(3)新建安装服务文件:work-install.bat

  work-service.exe install
  work-service.exe start

 (4)新建卸载服务文件:work-uninstall.bat

  work-service.exe stop
  work-service.exe uninstall

3、执行操作

(1)鼠标双击work-install.bat,创建服务,并启动,可以在系统->服务中查询到服务名称为work-service的服务。

(2)鼠标双击work-uninstall.bat,停止并删除服务,系统->服务中work-service被删除了。

【实践2】使用Microsoft.Extensions.Hosting.WindowsServices将.net转换成Windows服务

该方式需要引入包Microsoft.Extensions.Hosting.WindowsServices,同时在Program.cs中添加UseWindowsService方法调用,

本文以work-service服务为例子:

(1)源码修改如下

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Net;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using log4net;

namespace WorkServer
{
    static class Program
    {
        public static readonly ILog Log = LogManager.GetLogger(typeof(Program));

        static async Task Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            var host = Host.CreateDefaultBuilder(args);
            //判断当前系统是否为windows
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                host.UseWindowsService();
            }
            return host.ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
            });
        }
    }

    public class Worker : BackgroundService
    {
        public static readonly ILog Log = LogManager.GetLogger(typeof(Worker));
        private readonly ILogger<Worker> _logger;


        public Worker(ILogger<Worker> logger)
        {
            _logger = logger;
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            try
            {
                //TODO 业务代码
                while (!stoppingToken.IsCancellationRequested)
                {
                    //TODO 业务代码
                    Log.Info("Worker running at: {DateTimeOffset.Now}");
                    await Task.Delay(1000, stoppingToken);
                }
            }
            catch (Exception e)
            {
                Log.Error("main:ExecuteAsync failed.", e);
            }
            
        }
    }
}

(2)新建安装服务文件:work-install.bat

@sc create work-service binPath= "D:\work\WorkServer.exe"
@sc start work-service
@sc config work-service start= AUTO

 (3)新建卸载服务文件:work-uninstall.bat

@sc stop work-service 

  

标签:服务,service,Windows,work,jar,Hosting,using
From: https://www.cnblogs.com/guobm/p/17916205.html

相关文章

  • 教你windows10如何原生支持预览IPhone拍摄的HEIC格式照片
    HEIC是新出的一种图像格式,苹果的iOS11更新后,iPhone7及其后硬件,在拍摄照片时默认存储为HEIC格式。与JPG相比,它占用的空间更小,画质更加无损。HEIC格式照片支持iOS11及macOSHighSierra(10.13)及更新版本。但是此种格式是无法在Windows中直接使用自带的看图软件打开。(解决方案和扩......
  • Windows系统phpstudy+PbootCMS搭建网站记录
    环境Windows10phpstudyv8.1          下载地址:https://www.xp.cn/download.htmlPbootCMSv3.2.4  下载地址:https://www.pbootcms.com/安装phpstudy 官网下载安装包,直接安装,安装完成后如下:PHP默认安装版本为:php7.3.4nts添加PHP的sqlite3扩展不添加扩展访......
  • 使用阿里云oss报错:com.alibaba.cloud:aliyun-oss-spring-boot-starter:jar:unknown wa
    根据阿里云OSS的案例文档,在springboot项目中配置pom时报错https://github.com/alibaba/aliyun-spring-boot/tree/master/aliyun-spring-boot-samples/aliyun-oss-spring-boot-sampledemo中的配置:<dependency><groupId>com.alibaba.cloud</groupId>......
  • Windows 了解一下Windows
    运行1.“运行”这个软件是windows里面经常要用到的工具,它可以通过一些程序的名称快速打开管理程序,以下是常用管理程序,如果你觉得你的记忆能力足够好的话,可以进入C:\windows\system32里面找找所有管理软件并记住他们的名称,然后在运行里面直接使用名称就可以快速打开。taskmg......
  • 解决Windows服务器远程桌面连接无法连接的问题
    远程桌面连接是Windows服务器中一种常用的远程管理方式,但有时候我们可能会遇到无法连接到远程桌面的问题。本文将介绍一些常见的解决方法,帮助您解决Windows服务器远程桌面连接无法连接的问题。1.确保远程桌面服务已启用:首先,我们需要确保Windows服务器上的远程桌面服务已启用。可以......
  • 国产显卡如何正确打开 —— Windows平台下使用驱动精灵为国产显卡更新驱动(兆芯平台)
    买了一个国产的电脑,全国产,CPU慢些也就忍了,软件兼容性差、稳定性差也忍了,大不了就用来上网看电影嘛,关键问题是这个国产显卡放电影居然有些卡,播放电影的时候存在明显的卡顿感,这简直是把国产电脑在我脑海中唯一的用处也给堵上了。最近想着用用Windows的11代操作系统,尝尝鲜,但是手上没......
  • windows 获取 磁盘 serialnum
     #include<Windows.h>#include<iostream>#include<iomanip>#include<ntddscsi.h>intmain(){constwchar_t*drivePath=L"\\\\.\\PhysicalDrive0";//设置为磁盘的路径,根据需要更改HANDLEhDevice=CreateFileW(driv......
  • windows本地部署webUI框架遇到的问题及解决
    最近对stablediffusion比较感兴趣,就想着拿一些模型在本地跑一跑感受一下,也想训练一些自己的模型玩一玩,刚开始参照网上的教程及github上的官方教程一直安装不成功,总是报错:torch安装不成功或其他的一些,本人系统是win10,总结了一些可以尝试的解决方法如下:1.对conda使用不是很熟悉,......
  • 【Windows】微软自带的系统阴影副本(VSS)
    学习就是在生活的方方面面!在前两天和我的老哥的一次闲聊中,老哥介绍了Windows系统的NTFS磁盘自带的,类似于快照的系统,VSS于是我就开始了学习! 1.什么是VSSVSS是微软公司的一种技术,全称为VolumeShadowCopyService(卷影复制服务)。VSS是Windows操作系统中的一个功能,用于创建文......
  • Windows11忘记开机密码重置
    在锁屏页面按着shift键重启,找到命令行输入一下两行代码copyc:\windows\system\system32\utilman.exec:\windows\system32\utilman.exebakcopyc:\windows\system32\cmd.exec:\windows\system32\utilman.exe/y然后退出命令行,重启计算机,在输入密码页面右下角有一个轻松使......