如何将任意exe程序、.bat批处理文件封装成windows服务

您所在的位置:网站首页 将exe添加到系统服务中心 如何将任意exe程序、.bat批处理文件封装成windows服务

如何将任意exe程序、.bat批处理文件封装成windows服务

2024-07-17 03:57| 来源: 网络整理| 查看: 265

一、简介

NSSM 是一个服务封装程序,它可以将普通 exe 程序 或 Java程序 或 Nodejs 项目封装成服务,像 windows 服务一样运行。同类型的工具还有微软自己的 srvany,不过 NSSM 更加简单易用,并且功能强大。它的特点如下:

支持普通 exe 程序(控制台程序或者带界面的 Windows 程序都可以)安装简单,修改方便 可以重定向输出(并且支持 Rotation)可以自动守护封装了的服务,程序挂掉了后可以自动重启可以自定义环境变量 二、下载

下载主页:https://nssm.cc/download 直接下载:https://nssm.cc/release/nssm-2.24.zip

三、用法

不需要“安装” nssm。 只需将它放在系统上的某个位置(最好是 PATH 中的某个位置,例如c:\Windows目录下)并运行它。

但是请注意,nssm 将自己注册为事件日志消息源,这意味着从不同位置运行多个实例或不同版本的 nssm 可能会导致混淆。 另请注意,如果您运行事件查看器,它将打开 nssm 可执行文件,防止您覆盖它。 如果您要升级 nssm,请记住这一点。

某些功能被标记为从特定版本开始支持。 如果描述的版本比 下载 页面上提供的版本更新,则可能存在具有该功能的预发布 build 启用。

等效命令 下面的示例显示了 commands 将配置 现有 服务以匹配屏幕截图。 在许多情况下,它们代表相关参数的默认值,因此是多余的。 任何参数也可以重置为默认值

nssm reset

安装一个服务 您可以使用 nssm 来安装服务。 键入的命令是:

nssm install

安装程序由几个带有许多可配置参数的选项卡组成。 大多数都预设为 nssm 的默认值,因此可以在不离开 Application 选项卡的情况下安装服务。

Application tab(应用程序选项卡) 您要运行的应用程序(或脚本)的 Path 是唯一的必填字段。 如果应用程序需要在特定目录中启动,您可以在 Startup directory 字段中输入它。 如果该字段留空,则默认启动目录将是包含应用程序的目录。 Arguments 字段可用于指定要传递给应用程序的任何命令行参数。

下面的屏幕截图显示了 UT2003 服务器的安装。 运行此类服务的命令是ucc server,因此UCC.exe 的完整路径在Path 下输入,server 在Arguments 下输入。 在这里插入图片描述 等效命令:

nssm set UT2003 Application C:\games\ut2003\System\UCC.exe nssm set UT2003 AppDirectory C:\games\ut2003\System nssm set UT2003 AppParameters server

单击 Install service 完成服务的安装。

Details tab(详细信息选项卡) 详细信息选项卡列出了有关服务的系统详细信息。 在这里插入图片描述 等效命令:

nssm set UT2003 DisplayName UT2k3 nssm set UT2003 Description Unreal Tournament 2003 nssm set UT2003 Start SERVICE_AUTO_START

Log on tab(登录选项卡) 登录选项卡可用于管理将运行服务的用户帐户。 nssm 将自动确保您选择的帐户具有必要的作为服务登录权限。 在这里插入图片描述 等效命令:

nssm set UT2003 ObjectName LocalSystem nssm set UT2003 Type SERVICE_WIN32_OWN_PROCESS

Dependencies tab(依赖项选项卡) Dependencies 选项卡列出了必须在服务运行之前启动的所有服务或服务组。

您可以输入服务名称或显示名称,每行一个。 服务组名称前面必须有 SC_GROUP_IDENTIFIER 前缀(+ 符号)。 在这里插入图片描述 等效命令:

nssm set UT2003 DependOnService MpsSvc

Process tab(进程选项卡) Process 选项卡可用于设置应用程序的 process 优先级和 CPU 亲和性。 默认情况下,应用程序将以正常优先级运行,并允许在所有 CPU 上执行。 如果您希望将进程限制为可用 CPU 的子集,请取消选中“All processors”并根据需要选择 CPU。

服务运行时,可以从 Windows 任务管理器更改进程优先级和亲缘关系。 在这里插入图片描述

等效命令:

nssm set UT2003 AppPriority NORMAL_PRIORITY_CLASS nssm set UT2003 AppNoConsole 0 nssm set UT2003 AppAffinity All

Shutdown tab(停止选项卡) Shutdown选项卡列出了各种停止方法和超时,在崩溃后清理应用程序或正常停止服务时使用。 在这里插入图片描述 等效命令:

nssm set UT2003 AppStopMethodSkip 0 nssm set UT2003 AppStopMethodConsole 1500 nssm set UT2003 AppStopMethodWindow 1500 nssm set UT2003 AppStopMethodThreads 1500

Exit actions tab(退出动作选项卡) 退出动作 选项卡可以用来调整服务的重启 阈值 和默认的 退出动作。您也可以指定应用程序自动重启的间隔时间 强制延迟。

要为特定应用程序退出代码配置退出操作,您必须使用注册表,如下所述(https://nssm.cc/usage#exit)。

在这里插入图片描述 等效命令:

nssm set UT2003 AppThrottle 1500 nssm set UT2003 AppExit Default Restart nssm set UT2003 AppRestartDelay 0

I/O tab(输入/输出 选项卡) I/O 选项卡可用于指定启用 I/O 重定向 时使用的输入和/或输出文件。 设置 Output 和 Error 通常足以捕获应用程序生成的日志消息。

按照 下文 的说明在注册表中配置 I/O,以更好地控制路径和访问模式。 在这里插入图片描述 等效命令:

nssm set UT2003 AppStdout C:\games\ut2003\service.log nssm set UT2003 AppStderr C:\games\ut2003\service.log

File rotation tab(文件轮换选项卡) 文件轮换选项卡可以与I/O设置一起使用,以配置服务重启时输出文件的轮换。

如果选中 Replace existing Output and/or Error files 复选框,nssm 将在启动服务时覆盖现有输出文件。 默认是附加到任何现有文件。 如果选中 Rotate files 复选框,nssm 将在设置 I/O 重定向之前重命名现有文件。 使用 Restrict rotation 字段来禁用文件轮换,这些文件的修改时间超过指定的 seconds 或小于指定的 kilobytes。

默认情况下,nssm 仅在服务(重新)启动时执行文件轮换。 要在服务运行时启用轮换到指定大小限制的文件,请选中 Rotate while service is running 复选框。 在线轮换忽略任何配置的文件期限。

危险,移动的部件! 在线轮换需要 nssm 来拦截应用程序的输出并自行写入文件。 复杂性的增加必然导致失败的风险增加。

在这里插入图片描述

等效命令:

nssm set UT2003 AppStdoutCreationDisposition 4 nssm set UT2003 AppStderrCreationDisposition 4 nssm set UT2003 AppRotateFiles 1 nssm set UT2003 AppRotateOnline 0 nssm set UT2003 AppRotateSeconds 86400 nssm set UT2003 AppRotateBytes 1048576

Environment tab(环境变量选项卡) Environment 选项卡可用于指定以换行符分隔的 [环境变量] (https://nssm.cc/usage#environment) 列表以传递给应用程序。 如果选中 Replace default environment 复选框,则指定的变量将是传递给服务的 only 变量。 未选中时(默认),将保留服务启动时已经创建的环境变量。

在这里插入图片描述 等效命令:

nssm set AppEnvironmentExtra JAVA_HOME=C:\java

Installing from the command line(从命令行安装) 从 2.0 版开始,您还可以绕过 GUI 并从命令行安装服务。 语法是:

nssm install []

请注意,输入到服务数据库的实际程序是 nssm 本身,因此您在安装服务后不得移动或删除 nssm.exe。 如果您确实希望更改 nssm.exe 的路径,您可以删除并重新安装服务或编辑 HKLM\System\CurrentControlSet\Services\servicename\ImagePath 以反映新位置。

Quoting issues(引用的问题) nssm 正确处理带有空格的路径,但是由于命令提示符的工作方式,向它传递参数可能会很棘手。

如果应用程序的路径包含空格,则需要将其括在引号中,否则命令提示符会将路径解释为 两个 参数。

nssm install "C:\Program Files\app.exe"

如果您希望提供的选项之一包含空格,则您也需要引用它 并且 引用引号本身。

nssm install """This is one argument"""

Isabella Sanfilippo 提出了一种从批处理文件安装 Java 应用程序的方法。

nssm install solr "%JavaExe%" -Dsolr.solr.home="\"%CD%\solr"\" -Djetty.home="\"%CD%"\" -Djetty.logs="\"%CD%\logs"\" -cp "\"%CD%\lib\*.jar"\";"\"%CD%\start.jar"\" -jar "\"%CD%\start.jar"\"

John Duffy 需要将引号传递给参数列表。

nssm set NodeServer3000 AppParameters """""""$Env:NODE_JS_NPM"""""" start"

Removing a service(删除服务)

nssm remove

在这里插入图片描述

在删除服务之前会显示一个确认窗口。

在这里插入图片描述

从 2.0 版开始,您还可以从命令行删除服务,即:

nssm remove confirm 警告: nssm 会很高兴地尝试删除任何服务,而不仅仅是 nssm 自己管理的服务。 尽量不要删除您不应该删除的服务…

Service shutdown(关闭服务)

当 nssm 收到来自 Windows 服务管理器的停止命令,或者当它检测到被监控的应用程序已经退出时,它会尝试正常地关闭被监控的应用程序和所有子进程。 如果应用程序的进程树没有及时退出,nssm 可以强制终止所有属于该应用程序的进程和子进程。

nssm 可以使用四个阶段来关闭应用程序,默认情况下它将依次尝试所有四个阶段。 可以(尽管不推荐)禁用部分或所有方法的使用。 不同的应用程序将对各种请求做出不同的响应,因此将它们全部启用通常是确保应用程序正常关闭的最佳方式。 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3