• 使用NSSM将.exe程序安装成windows服务


    1、下载NSSM:NSSM - the Non-Sucking Service Manager

     

    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 
        nssm stop %servicename%    
        echo 开始移除服务 %servicename%
        echo remove service %servicename%
        REM NSSM删除服务命令:nssm remove  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  DisplayName 
    nssm set %servicename% DisplayName %servicename%
    echo 设置服务描述
    REM nssm set  Description 
    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、参考链接:

    使用NSSM部署.net API自动化BAT脚本 - 知乎 (zhihu.com)

    使用NSSM安装.exe文件成Windows服务(.bat文件操作) - 汪小让 - 博客园 (cnblogs.com)

    5、补充

    有园友说也可以用WinSW,找了下资料,还没试过,仅供参考:

    使用WinSW把nginx做成windows服务 - runliuv - 博客园 (cnblogs.com)

  • 相关阅读:
    postgreSQL15发布,难掩激动快速尝鲜
    git 修改用户名和密码
    【数据结构与算法】---OJ手撕链表题
    C++下基于std标准库实现配置文件的读取
    购物车页面的测试用例设计
    props验证指的是什么?Vue组件的props验证
    【MySQL】基本查询 (一)
    矩阵的乘法运算与css的3d变换(transform)
    QT--多线程与MySQL数据库
    Linux修改fs.inotify.max_user_watches(“外部文件更改同步可能很慢”和“当前的 inotify(7) 监视限制太低”)
  • 原文地址:https://www.cnblogs.com/magicMaQaQ/p/18174409