码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Windows中实现将bat或exe文件作为服务_且实现命令行安装、配置、启动、删除服务


    一、背景描述

            在Windows环境下进行日常的项目开发过程中,有时候需要将bat文件或exe文件程序注册为Windows的服务实现开机自己运行(没有用户登陆,服务在开机后也可以照常运行)、且对于那些没有用户交互界面的exe程序来说只要在后台运行即可,无需在桌面显示该exe程序窗口内容、无需用户手动打开,还可以防止用户不小心关闭该程序。

    二、微软官方的SC命令

            由于使用微软默认的sc命令启动服务可能会出现【[SC] StartService 失败 1053:服务没有及时响应启动或控制请求。】错误,因此我这里选用Nssm服务封装工具来实现对bat或exe文件作为服务。

    SC、NET命令说明
    序号SC命令SC命令说明
    1

    语法:【sc create 服务名称 start= auto  binpath= "需作为服务的文件路径和文件名称" displayname= "在服务管理器上显示的服务名称"】

    示例:将E:\SC、NET命令测试\Debug路径下的Test_MontiorSCADAConnNumber.exe程序设置为自动启动且名为testexe服务

    (sc create testexe start= auto  binpath= "E:\SC、NET命令测试\Debug\Test_MontiorSCADAConnNumber.exe" displayname= "测试可执行程序作为服务")

    创建服务

    2

    语法:【sc config 服务名 start=AUTO】

    示例:将testexe服务设置为自动启动

    (sc config testexe start=AUTO)

    设置服务的启动方式
    3

    语法:【sc start 服务名】 或【net start 服务名】

    示例:启动testexe服务

    (sc start testexe)或(net start testexe)

    启动服务
    4

    语法:【sc pause 服务名】 或【net pause 服务名】

    示例:暂停testexe服务

    (sc pause testexe)或(net pause testexe)

    暂停服务
    5

    语法:【sc delete 服务名】 或【net delete 服务名】

    示例:删除testexe服务

    (sc delete testexe)或(net delete testexe)

    删除服务

    sc.exe create | Microsoft Learnsc.exe create 命令的参考文章,该命令为注册表和服务控制管理器数据库中的服务创建子项和条目。icon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/sc-create使用 SC 配置服务 - Win32 apps | Microsoft LearnWindows SDK 包含命令行实用工具(Sc.exe),可用于查询或修改已安装服务的数据库。 其命令对应于 SCM 提供的函数。 语法如下所示。icon-default.png?t=N7T8https://learn.microsoft.com/zh-CN/windows/win32/services/configuring-a-service-using-sc操作系统的 Net 命令 - Windows Server | Microsoft Learn提供有关操作系统上的 Net 命令的一些信息。icon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/troubleshoot/windows-server/networking/net-commands-on-operating-systems查看SC命令的语法内容是【打开CMD窗口输入sc】即可,如下图所示:

    三、NSSM服务封装工具

    3.1、NSSM简介

            NSSM是Windows环境下一款免安装的服务管理软件,它可以将bat文件或者exe应用程序封装成服务,封装后的服务可以设置自动启动等操作;并且可以监控程序运行状态,程序异常中断后自动启动,实现守护进程的功能;不仅支持图形界面操作,也完全支持命令行设置。同类型的工具还有微软自己的srvany;不过NSSM更加简单易用,并且功能强大。

    NSSM - the Non-Sucking Service Managericon-default.png?t=N7T8https://nssm.cc/NSSM下载界面icon-default.png?t=N7T8https://nssm.cc/download下载nssm-2.24.zipicon-default.png?t=N7T8https://nssm.cc/release/nssm-2.24.zip

    3.2、将bat或exe文件封装为服务

            将下载好的NSSM 2.24解压;根据自己的操作系统位数选择对应的NSSM,比如我这里的操作系统是64位的就选择使用win64文件夹里面的NSSM程序,如下图所示:

    NSSM封装服务的命令
    序号NSSM封装bat或exe文件为服务的命令说明
    1nssm install创建封装bat或exe文件为服务的命令,且打开可操作的界面命令方便选择需要封装为服务的文件
    2nssm install 服务名称 "需封装的bat或exe文件路径和名称"

    直接对需要封装的bat或exe文件进行创建服务

    比如:我需要将【E:\SC、NET命令测试\重启Default Web Site.bat】文件创建名为【testbatservice】的服务命令为【nssm install testbatservice "E:\SC、NET命令测试\重启Default Web Site.bat"】

    3nssm start 服务名称

    启动指定的服务

    比如:【nssm start testbatservice】

    4nssm pause 服务名称

    暂停服务

    比如:【nssm pause testbatservice】

    5nssm restart 服务名称

    重启服务

    比如:【nssm restart testbatservice】

    6nssm stop 服务名称

    停止服务

    比如:【nssm stop testbatservice】

    7nssm remove 服务名称

    删除服务

    比如:【nssm remove testbatservice】

    NSSM服务封装工具的完整命令行内容icon-default.png?t=N7T8https://nssm.cc/commands

    ①必须使用超级管理员打开命令行(CMD)界面,否则启动服务的时候会失败。

    ②进入NSSM程序路径(比如:我这里的NSSM路径是:【E:\迅雷下载\nssm-2.24\win64】)

    1. --比如:我这里的NSSM路径是【E:\迅雷下载\nssm-2.24\win64】,那么我进入该路径的操作如下:
    2. E:
    3. cd E:\迅雷下载\nssm-2.24\win64

     

    ③打开NSSM的窗体安装bat文件作为服务

    ④启动我们刚才创建的服务(比如我这里刚创建的服务名是:testbatservice)

    ⑤重启服务 (比如我这里刚创建的服务名是:testbatservice)

     

     ⑥停止服务(比如我这里刚创建的服务名是:testbatservice)

    ⑦移除服务

     

  • 相关阅读:
    【华为上机真题 2022】字符串最后一个单词的长度
    rocketmq各类问题
    redis set命令总结
    Python3:@property属性装饰器
    ApacheCon Asia 2022 启动,7 场阿里云大数据 +AI 议题分享等你围观
    阿里云ECS部署Java项目使用docker安装MySQL
    Linux 中如何使用 id 命令
    2022杭电多校第二场
    【深度学习】Generative Adversarial Network 生成式对抗网络(GAN)
    低代码如何构建支持OAuth2.0的后端Web API
  • 原文地址:https://blog.csdn.net/xiaochenXIHUA/article/details/133411829
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号