首页 > 系统相关 >NSSM工具 : 将 .exe 程序安装成 Windows 服务

NSSM工具 : 将 .exe 程序安装成 Windows 服务

时间:2024-12-25 14:09:17浏览次数:3  
标签:NSSM exe 服务 nssm 程序安装 echo set servicename%

1、下载NSSM

NSSM :the Non-Sucking Service Manager

https://nssm.cc/usage

2、方式一:cmd方式安装服务

将下载的压缩包解压,找到nssm.exe,以管理员身份打开cmd,在cmd中定位到nssm.exe所在路径,执行nssm install 服务名

按下enter键会自动弹出nssm的窗体:

在Application-Application Path中选择你的可执行文件.exe,确认后会自动填入Startup directory,Service name处可以修改服务名

上方选项卡的Details中可以填入显示名称、描述、启动方式,一般默认是自动启动

填写完成后点击右下角的Install service即可。

3、方式二:批处理文件方式安装服务

将nssm.exe复制到要打包的程序文件夹中,再在同目录下新建三个txt文本,分别对应安装服务、关闭服务、卸载服务,将后缀名改为bat

右键安装服务.bat-编辑:

REM 创建服务
echo off
echo 即将开始采用nssm安装应用程序为windows服务,请确认以系统管理员身份运行
set servicename=自定义服务名称
REM %~dp0 为BAT脚本取当前系统目录命令,API_HOST.EXE为需要包装为服务的应用程序
set app_path="%~dp0程序.exe"
set nssm_path="%~dp0nssm.exe"
REM 将NSSM复制至系统盘目录,或者 添加 windows 环境变量亦可达到目的
set targetFolder="C:\windows\System32\nssm.exe"
REM 检查NSSM.exe文件是否存在
echo 检查当前目录nssm.exe文件是否存在
if not exist %nssm_path% (
    echo %nssm_path% 不存在,请确认
    pause 
    goto exitCode
 )
) 
echo %nssm_path% 存在,即将检查文件并复制
REM 复制nssm
if not exist %targetFolder% (
    copy /y %nssm_path% %targetFolder%
    echo 复制nssm至windows系统目录完成
)
echo 即将创建服务 %servicename%
echo  ****************************************

REM 判断service 是否存在,若存在,先停止,至删除
echo 检查服务是否存在,存在则停止服务后删除,再安装
sc query|find /i "%servicename%" >nul 2>nul
if not errorlevel 1 (
    echo 服务已存在,停止运行服务
    echo stop %servicename%
    REM NSSM停止服务命令:nssm stop <ServiceName>
    nssm stop %servicename%    
    echo 开始移除服务 %servicename%
    echo remove service %servicename%
    REM NSSM删除服务命令:nssm remove <ServiceName> confirm
    REM 移除命令最后的 confirm 即表示无限弹窗确认,直接移除。
    nssm remove %servicename% confirm
    echo 移除服务完成
)

echo *********************************
echo 开始创建服务 %servicename%
REM NSSM命令:nssm install <服务名> <服务需要执行的程序>
nssm install %servicename% %app_path%
echo 开始设置服务信息
echo set service property
echo 设置服务显示名称
REM nssm set <ServiceName> DisplayName <ServiceName>
nssm set %servicename% DisplayName %servicename%
echo 设置服务描述
REM nssm set <ServiceName> Description <ServiceName>
nssm set %servicename% Description xxx控制系统 
echo 设置服务启动方式为:自动
nssm set %servicename% Start SERVICE_AUTO_START
echo *********************************
echo 启动服务 %servicename%
echo start service %servicename%
nssm start %servicename%
echo 服务创建并启动完成

:exitCode
pause
set servicename=自定义服务名称,这里的自定义服务名称改为你想要的名称
set app_path="%~dp0程序.exe",这里的程序.exe改为你的可执行文件名
%~dp0代表的是当前目录

右键关闭服务.bat-编辑:

@echo off 
@title 关闭服务
echo= 开始关闭服务!  
@echo off  
@sc stop 自定义服务名称
@echo off  
echo= 关闭服务结束!  
@pause

右键卸载服务.bat-编辑:

@echo off 
@title 删除服务
echo= 开始删除服务!  
@echo off  
nssm stop 自定义服务名称
nssm remove 自定义服务名称 confirm    
@echo off  
echo= 删除完成!  
@pause

上述的bat文件都需要用管理员身份运行,可以为bat文件创建快捷方式,在快捷方式上右键属性-快捷方式-高级-勾选用管理员身份运行

双击快捷方式执行即可。

4、补充

有朋友说也可以用WinSW,找了下资料,还没试过,仅供参考:使用WinSW把nginx做成Windows服务 。

作者:MaQaQ
出处:cnblogs.com/magicMaQaQ/p/18174409
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

标签:NSSM,exe,服务,nssm,程序安装,echo,set,servicename%
From: https://www.cnblogs.com/o-O-oO/p/18630246

相关文章

  • 【异常】‘.\keytool.exe‘ 不是内部或外部命令,也不是可运行的程序
    一、报错内容二、报错说明遇到'.\keytool.exe'不是内部或外部命令,也不是可运行的程序这个错误,通常是因为系统找不到keytool.exe的位置。keytool.exe是JavaDevelopmentKit(JDK)中的一个工具,用于管理密钥库(keystore)和证书。三、问题解决要解决这个问题,你需要......
  • 用Moninfo.exe轻松获取显示器EDID
    我们天天在用显示器,但显示器的一些关键参数却总是记不住。有时为了配置电脑,有时为了发挥显示器的极限性能,有时为了定制驱动,等等,都需要获取显示器的EDID数据。有些工具虽然可以读出EDID,但难以解读那一堆十六进制数字。每当需要获取EDID数据时,我一般使用EnTech推出的MonitorA......
  • IndexedDB:前端存储新宠,数据库的“特种兵”
    indexedDB是不可靠存储,会在c盘空间不足时,自动清空,极易丢失数据。web的离线功能,就是能存一些数据,包括图片到本地,等可以上网的时候再把这些数据更新到服务器的数据库。IndexedDB具有以下特点IndexedDB数据库是存储键值对的非关系型数据库。IndexedDB内部采用对象仓库(object......
  • CS61B 0A Exercises
    虽然以前有Java基础,但是工作四年主要使用的还是python和shell,另外对于数据结构和算法的基础也不牢固。所以开一个坑从头开始学习CS61B,对于Dicussion/Lab/Homework做一个记录,学完之后回头看能有一个收获。整体流程参考CS自学社区,学习课程为B站CS61B,本篇为学习完Lectrue01后的Homew......
  • Java程序打包成exe,无Java环境也能运行
    Java程序开发完成后,通常情况下以jar包的形式发布。但有时我们需要给非软件开发人员使用程序,如制作好窗体应用,把它发给没有java开发环境的人使用,此时就需要制作exe安装包。本文介绍如何将java程序制作成exe安装包,并提供有图片和三方依赖jar包的解决方案。1.安装exe制作软件制......
  • 【Basic Abstract Algebra】Exercises for Section 3.1 — Cosets and Lagrange's The
    Let\(G\)beafinitegroupand\(H<G\).If\([G:H]=2\),then\(gH=Hg\).Proof:If\([G:H]=2\),thenthereareonlytwocosetsof\(H\)in\(G\),andoneofthecosetsis\(H\)itself,i.e.,\[G=H\cupgH=H\cupHg,\]where\(H\cap......
  • 【Basic Abstract Algebra】Exercises for Section 2.5 — Dihedral groups
    Writedownthedihedralgroup\(D_5\).Solution:\(D_5=\langr,s\mids^2=r^5=1,~srs=r^{-1}\rang\),where\(r=(12345),~s=(15)(24)\),i.e.\(D_5=\{\text{id},s,r,r^2,r^3,r^4,rs,r^2s,r^3s,r^4s\}\).Wehave\[\begin{aligned}&r^2=(13524),~r......
  • Python 程序打包 exe:从代码到可执行文件的完美转换
    公众号:测试工程师成长之路一、Python打包exe之基础必备在Python的应用场景日益广泛的今天,将Python程序打包成exe文件的需求愈发凸显。一方面,这极大地方便了程序的分发,无论是分享给同事、客户,还是发布到网上供用户下载,无需对方安装Python环境,一个exe文件就......
  • 前端本地存储指南:从 localStorage 到 IndexedDB,技术优缺点与示例代码
    作为一名前端程序员,总会面临一个问题:“用户的数据该往哪里放?”这就好比一个咖啡店老板,想着咖啡豆要放仓库、柜台还是直接丢客户兜里。今天我们就来聊聊前端常用的本地存储技术,各自的优缺点,以及到底该选哪一个!1.localStorage—傻白甜的代名词localStorage是前端开发者最......
  • PortQry 命令行端口扫描程序版本 2.0 下载 PortQryV2.exe,这是一个命令行实用程序,可
    从Microsoft下载中心下载PortQry命令行端口扫描程序版本2.0---DownloadPortQryCommandLinePortScannerVersion2.0fromOfficialMicrosoftDownloadCenter使用PortQry命令行工具-WindowsServer|MicrosoftLearn 什么是PortQry?PortQry是一款由微软开......