NSSM(Non-Sucking Service Manager)是一个免费、开源的Windows服务管理工具,主要用于将普通的可执行程序(如EXE、BAT脚本、Java JAR文件等)封装注册为Windows系统服务,使其能够像系统服务一样具备自动启动、后台运行、故障恢复等功能。这个工具因为其易于使用、功能全面且稳定可靠而受到许多系统管理员和技术人员的喜爱。
NSSM - the Non-Sucking Service Manager
NSSM - the Non-Sucking Service Manager
GitHub - kirillkovalenko/nssm: Non-Sucking Service Manager
GitHub - dkxce/NSSM: The Non-Sucking Service Manager
GitHub - xxnuo/Nssm-Chinese: Nssm_ ch - Windows 系统服务管理器 提供GUI管理Win系统服务的添加、修改、删除




|
NSSM(Non-Sucking Service Manager)是一个免费、开源的Windows服务管理工具,主要用于将普通的可执行程序(如EXE、BAT脚本、Java JAR文件等)封装注册为Windows系统服务,使其能够像系统服务一样具备自动启动、后台运行、故障恢复等功能。这个工具因为其易于使用、功能全面且稳定可靠而受到许多系统管理员和技术人员的喜爱。 NSSM的主要特点包括:
为什么使用NSSM:
NSSM是一个强大且实用的工具,特别适合那些需要将应用程序以服务形式部署在Windows服务器环境中的场景。 |
|||||||||||||||||||||||||||||||||||||||||||||
|
NSSM(Non-Sucking Service Manager)的功能可以根据其提供的服务管理和配置能力,大致分类如下:
通过这些分类的功能,NSSM为系统管理员和开发者提供了一个强大且灵活的工具,以便将各种应用程序无缝集成到Windows服务管理体系中,提升系统维护的效率和可靠性。
|
|||||||||||||||||||||||||||||||||||||||||||||
|
NSSM(Non-Sucking Service Manager)的底层原理主要涉及与Windows操作系统的底层服务控制管理接口(Service Control Manager, SCM)的交互。以下是一些关键的技术点和原理:
NSSM通过与Windows操作系统底层服务管理接口的紧密集成,提供了一种简便的方法来封装和管理服务,同时增加了额外的监控、日志和恢复功能,使得普通应用程序能够以更加健壮和可控的方式作为服务运行。 |
|||||||||||||||||||||||||||||||||||||||||||||
|
NSSM(Non-Sucking Service Manager)的架构设计围绕着几个核心组件和它们之间的交互,以实现将普通应用程序作为Windows服务高效、灵活地管理。虽然NSSM的具体内部架构细节没有详细的官方文档,但基于其功能和工作原理,我们可以概述其主要组成部分和工作流程:
NSSM构建了一个轻量级但功能强大的框架,它通过上述组件的协同工作,实现了服务的便捷管理、灵活配置、稳定运行以及故障恢复,从而满足了不同应用场景的需求。 |
|||||||||||||||||||||||||||||||||||||||||||||
|
学习和应用NSSM(Non-Sucking Service Manager)来管理Windows服务,可以遵循以下初级大纲进行实践: 1. 理论基础
2. 准备工作
3. 使用NSSM安装服务
4. 服务管理与监控
5. 故障恢复与高级配置
6. 实践与故障排除
7. 总结与进阶
通过以上步骤,你可以从零开始掌握NSSM的基本应用,为进一步深入服务管理领域打下坚实的基础。 |
|||||||||||||||||||||||||||||||||||||||||||||
|
对于已经掌握了NSSM基础应用的用户,中级应用大纲旨在进一步深化对NSSM的理解和运用,涉及更复杂的配置、故障排查以及自动化管理。以下是NSSM中级应用的学习大纲: 1. 高级服务配置与优化
2. 高可用性与容错策略
3. 安全与权限管理
4. 自动化与脚本编写
5. 进阶故障排查
6. 实战案例分析
7. 最佳实践与持续学习
通过上述中级大纲的学习,你将能够更熟练地运用NSSM进行复杂服务管理,提升服务的稳定性和安全性,同时提高工作效率。 |
|||||||||||||||||||||||||||||||||||||||||||||
|
NSSM(Non-Sucking Service Manager)的底层原理主要是基于 Windows 操作系统的服务管理机制。它通过调用 Windows 的服务控制管理器(SCM)来创建、启动、停止和管理服务。 具体而言,NSSM 实现了以下几个重要的功能和原理:
NSSM 的底层原理是构建在 Windows 操作系统的服务架构之上,通过与 SCM 的交互和管理,实现了用户程序到服务的转换和管理。这使得用户能够更方便地将各种程序作为服务在 Windows 系统上运行,并对这些服务进行有效地监控和管理。 |
|||||||||||||||||||||||||||||||||||||||||||||
|
NSSM(Non-Sucking Service Manager)的架构主要包括以下几个核心组件和功能:
NSSM 的架构是基于 Windows 服务的架构,通过与 SCM 的交互和管理,实现了用户程序到服务的转换和管理。NSSM 提供了简单而强大的功能,使得用户能够更方便地将各种程序作为服务在 Windows 系统上运行,并对这些服务进行有效地监控和管理。 |
|||||||||||||||||||||||||||||||||||||||||||||
|
当你准备使用NSSM(Non-Sucking Service Manager)时,以下是一个初级应用大纲,可以帮助你快速上手:
这个初级应用大纲可以帮助你快速了解如何安装、注册、管理和配置NSSM服务。当然,NSSM还有更多高级功能和选项,你可以在掌握基础之后进一步探索 |
|||||||||||||||||||||||||||||||||||||||||||||
|
一个NSSM(Non-Sucking Service Manager)中级应用大纲,帮助你更深入地了解如何使用NSSM进行高级服务管理:
通过这个中级应用大纲,你可以进一步提升对NSSM的应用水平,学习如何利用其丰富的功能来管理和监控服务,以及如何提高服务的稳定性和安全性。祝你在使用NSSM过程中取得成功! |
|||||||||||||||||||||||||||||||||||||||||||||
|
一个NSSM(Non-Sucking Service Manager)高级应用大纲,帮助你深入学习如何使用NSSM进行高级的服务管理和优化:
通过这个高级应用大纲,你可以深入了解NSSM的高级功能和应用场景,学习如何通过NSSM实现服务的高可用、安全和稳定运行。祝你在使用NSSM进行高级服务管理时取得成功!如有任何问题,欢迎随时向我提问。 |
|||||||||||||||||||||||||||||||||||||||||||||
|
一个NSSM(Non-Sucking Service Manager)专家级应用大纲,帮助你更深入地了解如何在复杂环境中进行高级的服务管理和优化:
通过这个专家级应用大纲,你可以深入学习NSSM在复杂场景下的应用和管理,掌握高级的技能和经验,从而能够应对复杂的服务管理挑战。祝你在使用NSSM进行专家级服务管理时取得成功! |
|||||||||||||||||||||||||||||||||||||||||||||
|
一个NSSM(Non-Sucking Service Manager)顶尖级应用大纲,旨在帮助你探索 NSSM 在最复杂和要求最高的环境中的应用:
通过这个顶尖级应用大纲,你将深入探索 NSSM 在最具挑战性的环境中的应用,并了解未来趋势和创新发展。祝你在探索 NSSM 顶尖级应用时取得成功! |
|||||||||||||||||||||||||||||||||||||||||||||
|
Windows Services 是什么 为什么 怎么用 创建服务 管理服务 Windows Services 是在 Windows 操作系统上运行的后台应用程序,它们在系统启动时自动启动,并且可以在系统运行时持续运行而不受用户登录或注销的影响。Windows Services 通常以服务(Service)的形式存在,可以通过服务管理器进行管理和配置。 Windows Services 的存在有以下几个主要原因:
|
|||||||||||||||||||||||||||||||||||||||||||||
|
在Windows操作系统中,新建系统服务可以为计算机系统提供各种功能和服务。系统服务是在后台运行的软件模块,它们可以在系统启动时自动加载,并在整个系统运行过程中提供特定的功能。以下是新建系统服务的作用和优势: 作用:
优势:
|
|||||||||||||||||||||||||||||||||||||||||||||
|
新建系统服务可以应用于各种场景,以下是一些常见的应用场景:
|
|||||||||||||||||||||||||||||||||||||||||||||
|
系统服务的用途非常广泛,主要包括以下几个方面:
|
|||||||||||||||||||||||||||||||||||||||||||||
|
系统服务的基础技术原理涉及操作系统、进程管理、权限控制、通信机制等多个方面,以下是系统服务的基础技术原理:
|
NSSM(Non-Sucking Service Manager)是一个用于在 Windows 系统中管理后台服务的工具。它可以帮助用户将任意的可执行程序(如应用程序、脚本等)作为 Windows 服务来运行,并且提供了简单易用的命令行工具来配置、安装和管理服务。以下是基于 NSSM 工具按功能分类的命令表格。
NSSM 命令功能分类表
| 功能类别 | 功能描述 | 命令选项 | 示例命令 |
|---|---|---|---|
| 安装服务 | 用于将可执行文件作为服务安装到 Windows 系统中 | install |
nssm install MyService C:\path\to\executable.exe |
| 卸载服务 | 卸载已安装的服务 | remove |
nssm remove MyService |
| 查看服务状态 | 查看服务是否正在运行 | status |
nssm status MyService |
| 停止服务 | 停止已安装的服务 | stop |
nssm stop MyService |
| 启动服务 | 启动已安装的服务 | start |
nssm start MyService |
| 重启服务 | 重新启动已安装的服务 | restart |
nssm restart MyService |
| 修改服务配置 | 修改已安装服务的配置(如路径、参数等) | set |
nssm set MyService AppDirectory C:\path\to\newdir |
| 查看服务配置 | 显示已安装服务的配置信息 | dump |
nssm dump MyService |
| 安装日志记录 | 配置服务的输出重定向到日志文件 | set Output |
nssm set MyService Output C:\path\to\logfile.log |
| 设置服务环境变量 | 设置服务的环境变量 | set Env |
nssm set MyService Env VAR_NAME=value |
| 设置服务启动类型 | 设置服务启动时的行为(如自动启动、手动启动) | set Startup |
nssm set MyService Startup auto |
| 设置服务依赖 | 配置服务的依赖关系,即服务启动时需要其他服务的先启动 | set DependOn |
nssm set MyService DependOn "ServiceA, ServiceB" |
| 设置服务优先级 | 设置服务进程的优先级 | set Priority |
nssm set MyService Priority high |
| 设置服务的工作目录 | 设置服务的工作目录 | set AppDirectory |
nssm set MyService AppDirectory C:\path\to\workdir |
| 设置服务的启动延迟 | 配置服务启动时的延迟时间(以毫秒为单位) | set AppDelay |
nssm set MyService AppDelay 5000 |
| 设置服务的自定义参数 | 配置服务启动时传递的自定义参数 | set AppParameters |
nssm set MyService AppParameters "-param1 -param2" |
| 设置服务的标准输入输出 | 设置服务的标准输入和标准输出重定向文件 | set Input, Output |
nssm set MyService Input C:\path\to\inputfile.txt |
| 列出所有服务 | 列出当前系统中通过 NSSM 管理的所有服务 | list |
nssm list |
命令功能详细说明
-
安装服务 (
install)
用于将指定的可执行程序作为 Windows 服务安装,并可以指定该服务的各种参数(如工作目录、环境变量、输入输出重定向等)。bashCopy Codenssm install MyService C:\path\to\myapp.exe -
卸载服务 (
remove)
卸载一个已安装的服务,删除该服务及其配置。bashCopy Codenssm remove MyService -
查看服务状态 (
status)
查看服务是否正在运行,以及它的当前状态。bashCopy Codenssm status MyService -
启动服务 (
start)
启动一个已安装的服务。bashCopy Codenssm start MyService -
停止服务 (
stop)
停止正在运行的服务。bashCopy Codenssm stop MyService -
重启服务 (
restart)
重启一个已安装的服务,常用于更新配置后使其生效。bashCopy Codenssm restart MyService -
修改服务配置 (
set)
修改已安装服务的各种配置选项,如环境变量、工作目录、依赖服务等。bashCopy Codenssm set MyService AppDirectory C:\new\directory -
查看服务配置 (
dump)
查看一个已安装服务的所有配置信息,包括环境变量、启动类型、依赖服务等。bashCopy Codenssm dump MyService -
设置服务的日志输出 (
Output)
配置服务将输出重定向到指定的日志文件中,以便记录日志信息。bashCopy Codenssm set MyService Output C:\path\to\logfile.log -
设置环境变量 (
Env)
设置服务的环境变量,这些环境变量会在服务运行时被加载。bashCopy Codenssm set MyService Env VAR_NAME=value -
设置服务启动类型 (
Startup)
设置服务的启动类型,例如自动启动(auto)或手动启动(manual)。bashCopy Codenssm set MyService Startup auto -
设置服务依赖关系 (
DependOn)
设置服务的依赖关系,即指定该服务在启动之前需要其他服务启动。bashCopy Codenssm set MyService DependOn "ServiceA, ServiceB" -
设置服务优先级 (
Priority)
设置服务进程的优先级,可以是高(high)、正常(normal)或低(low)。bashCopy Codenssm set MyService Priority high -
设置工作目录 (
AppDirectory)
设置服务的工作目录,在服务启动时将从该目录运行。bashCopy Codenssm set MyService AppDirectory C:\path\to\workdir -
设置启动延迟 (
AppDelay)
配置服务启动时的延迟时间,以毫秒为单位,可以用来等待其他服务或资源准备好。bashCopy Codenssm set MyService AppDelay 5000 -
设置自定义参数 (
AppParameters)
向服务传递启动时的自定义参数,这些参数会传递给可执行文件。bashCopy Codenssm set MyService AppParameters "-param1 -param2" -
列出所有服务 (
list)
列出当前所有通过 NSSM 安装和管理的服务。bashCopy Codenssm list
NSSM(Non-Sucking Service Manager)提供了一个简洁而强大的命令行界面,用于在 Windows 系统中管理服务。通过安装、配置和管理服务,用户可以确保后台应用程序和脚本始终运行,并且可以在崩溃或重启后自动恢复。
NSSM -the Non-Sucking Service Manager
适用于Windows 10、Server 2016及更新版本 2017-04-26: Windows 10创作者更新或更新版本的用户应使用预发布版本2.24-101或任何更新版本,以避免服务启动失败的问题。如果由于某种原因无法使用该版本,您可以在注册表中设置AppNoConsole=1,但请注意,期望有控制台窗口的应用程序可能会出现意外行为。
感谢Sebasian Krause进行了初步诊断。
下载 NSSM应该适用于Windows 2000或更高版本。具体来说,支持Windows 7、Windows 8和Windows 10。下载中包含32位和64位二进制文件。大多数情况下,在64位Windows上运行32位版本应该是安全的,但在某些情况下,您可能发现它不起作用,必须使用64位版本。两个版本都是从相同的源代码编译而来。如果其中一个适用于您,请使用该版本。如果不适用,请尝试另一个版本。
许可证 NSSM属于公共领域。您可以无条件地使用它及/或其源代码,以满足您的任何需求。
最新版本 NSSM 2.24(2014-08-31) [be7b3577c6e3a280e5106a9e9db5b3775931cefc]
特色预发布版本 NSSM 2.24-101-g897c7ad(2017-04-26) [ca2f6782a05af85facf9b620e047b01271edd11d]
NSSM使用Jenkins持续集成服务器构建。如果您有勇气,可以下载任何可用的构建。
源代码 源代码包含在下载中,或者您可以浏览gitweb并查看Changelog
您还可以使用git从git://git.nssm.cc/nssm/nssm.git或http://git.nssm.cc/nssm/nssm.git克隆存储库。
Chocolatey软件包 您可以使用Chocolatey安装NSSM。Chocolatey软件包由第三方构建和维护,并可能与此处提供的最新构建不一致。
nssm 非常类似于 srvany。当由系统服务管理器启动时,它会在注册表中查找键 HKLM\System\CurrentControlSet\Services\servicename\Parameters,并尝试启动列在 Application 中的程序,在列在 AppDirectory 中的目录中启动,并传递列在 AppParameters 中的选项标志。细心的读者将注意到,这些值与 srvany 读取的值相同,这意味着 nssm 可以直接替换 srvany。
nssm 相关于这些注册表设置的行为在版本 2.8 中发生了变化。在以前的版本中,nssm 只会在服务启动时读取注册表一次。从版本 2.8 开始,每次监视的应用程序重新启动时都会查询注册表。在对注册表进行更改后,您无需重新启动 nssm 本身。
nssm 可以配置为在应用程序退出时执行四种操作之一,并且甚至可以根据应用程序的退出代码配置不同的操作。可能的操作包括:
Restart - nssm 将尝试重新启动应用程序。
在 2.2 版本之前,nssm 总是这样做,如果您没有像下面描述的那样明确配置,则现在是默认行为。升级到较新版本的 nssm 不会更改您的服务行为。
Ignore - nssm 将不尝试重新启动应用程序。Windows 服务管理器将看到您的服务仍在运行。这使您可以创建一个服务,在系统启动时运行一次,并通过检查您的服务是否处于运行状态来确保其成功完成。
这是 srvany 的默认行为,尽管这可能并不是预期的,并且通常不是您想要的,除非在上述用例中。
Exit - nssm 将退出。Windows 服务管理器将看到您的服务已停止。您可以配置它在失败时采取操作,使用标准操作系统工具。
Suicide - nssm 将以不干净的方式退出,而不标记服务为已停止。在 Vista 之前的 Windows 版本中,这是确保采取服务恢复操作的唯一方法,因为退出在旧操作系统上不起作用。
请注意,如果应用程序以退出代码 0 退出,则 nssm 不会自杀,除非您明确为 0 添加一个 AppExit 条目。这是为了防止服务管理器在优雅应用程序退出后采取失败恢复操作。
查看使用说明,了解如何为您的服务设置其中一种操作。
nssm 可以将被监视应用程序的 I/O 重定向到任何可使用 CreateFile() 系统函数打开的目标,使您能够捕获应用程序记录的状态消息,重定向来自命名管道的输入,访问串行端口等其他奇特的功能。使用说明有更多详细信息。
有关 nssm 运行服务和处理应用程序失败的详细信息,请参阅下载包中包含的源代码并查看 flmonitor 文档。nssm 基本上是 flmonitor 的抽象。
版本 2.22 版本 2.22 是 nssm 自首次发布以来的最大更新。主要新功能包括:
nssm 现在具有完全功能的图形用户界面。
除了大多数用户永远不会看到或在意的一些小例外外,nssm 可以通过其图形用户界面完成的任何事情都可以通过命令行参数完成。
nssm 选项现在可以使用命令行设置。
可以使用命令行设置服务参数,而无需使用注册表或新 GUI。因此,现在更容易从脚本安装和配置服务。
nssm 现在可以管理本地服务。
大多数系统服务的参数,例如启动类型或登录用户,可以使用命令行或 GUI 进行管理。
nssm 可以启动、停止和查询任何服务的状态。
nssm 现在可以旋转被监视应用程序的输出文件。
当应用程序正在运行时,日志可以在达到可配置大小时旋转。在启动应用程序之前,还可以旋转现有日志。
nssm 现在可以设置被监视应用程序的优先级类和 CPU 亲和性。
nssm 现在处理尝试从 stdin 读取的控制台应用程序。
以前,这类应用程序可能会在启动后立即退出,因为它们认为输入结束意味着用户希望它们退出。
nssm 现在支持 UAC。
如果您是管理员组的成员并从未提升的命令提示符中启动,nssm 将提示输入管理员凭据。
但请注意,如果 nssm 自身提升,其输出将被隐藏。这是无法避免的。
nssm 现在是 Unicode 应用程序。
所有版本
nssm使用Jenkins持续集成服务器构建。是的,构建从机由nssm本身控制,像这样:
nssm install Jenkins %PROGRAMFILES%\Java\jre7\bin\java.exe
nssm set Jenkins AppParameters -jar slave.jar -jnlpUrl https://jenkins/computer/%COMPUTERNAME%/slave-agent.jnlp -secret redacted
nssm set Jenkins AppDirectory C:\Jenkins
nssm set Jenkins AppStdout C:\Jenkins\jenkins.log
nssm set Jenkins AppStderr C:\Jenkins\jenkins.log
nssm set Jenkins AppStopMethodSkip 6
nssm set Jenkins AppStopMethodConsole 1000
nssm set Jenkins AppThrottle 5000
nssm start Jenkins
警告!
nssm需要管理员权限才能管理服务。大多数使用nssm的服务以LOCALSYSTEM权限运行。nssm中的错误可能导致严重问题,如过度使用CPU、内存耗尽、数据丢失甚至蓝屏。
此类错误是无意的,并且nssm已经有许多全球满意的用户证明其发行版的稳定性。下载其中一个开发版本时,需自担风险。
使用说明
不需要“安装”nssm。只需将其放置在系统中的某个位置(最好是PATH中的某个位置)并运行即可。
然而,请注意,nssm会将自己注册为事件日志消息源,这意味着从不同位置运行多个实例或不同版本的nssm可能会导致混淆。还要注意,如果运行事件查看器,它将打开nssm可执行文件,防止您覆盖它。如果要升级nssm,请记住这一点。
某些功能被标记为特定版本的支持。如果所描述的版本比下载页面上可用的版本更新,则可能有一个启用该功能的预发布版本。
以下等效命令示例显示了如何配置现有服务以匹配屏幕截图。在许多情况下,它们代表了相关参数的默认值,因此是多余的。任何参数也可以使用以下命令将其重置为其默认值:
nssm reset <servicename> <parameter>
安装服务
您可以使用nssm安装服务。键入的命令是:
nssm install <servicename> 安装程序由多个选项卡组成,具有许多可配置的参数。大多数参数都预设为nssm的默认值,因此可以在不离开Application选项卡的情况下安装服务。

应用程序选项卡application
路径到要运行的应用程序(或脚本)是唯一必需的字段。如果应用程序需要在特定目录中启动,则可以在“启动目录”字段中输入它。如果该字段留空,则默认启动目录将是包含应用程序的目录。参数字段可用于指定要传递给应用程序的任何命令行参数。
下面的屏幕截图显示了UT2003服务器的安装。运行此类服务的命令是ucc server,因此在Path下输入到UCC.exe的完整路径,在Options下输入server。
等效命令:
nssm set UT2003 Application C:\games\ut2003\System\UCC.exe
nssm set UT2003 AppDirectory C:\games\ut2003\System
nssm set UT2003 AppParameters server
单击“安装服务”即可完成服务的安装。

详细信息选项卡details
详细信息选项卡列出了有关服务的系统详细信息。
等效命令:
nssm set UT2003 DisplayName UT2k3
nssm set UT2003 Description Unreal Tournament 2003
nssm set UT2003 Start SERVICE_AUTO_START

登录选项卡log on
登录选项卡可用于管理运行服务的用户帐户。nssm将自动确保您选择的帐户具有必要的“作为服务登录”的权限。
等效命令:
nssm set UT2003 ObjectName LocalSystem
nssm set UT2003 Type SERVICE_WIN32_OWN_PROCESS
有关在命令行上配置帐户和密码的详细信息,请参阅命令行使用文档。如果您需要配置空密码,必须使用命令行。

依赖项dependencies
依赖项选项卡列出了在服务运行之前必须启动的任何服务或服务组。
您可以逐行输入服务名称或显示名称。服务组名称必须以SC_GROUP_IDENTIFIER前缀(即+符号)开头。
等效命令:
nssm set UT2003 DependOnService MpsSvc

进程选项卡process
进程选项卡可用于设置应用程序的进程优先级和CPU亲和性。默认情况下,应用程序将以正常优先级运行,并被允许在所有CPU上执行。如果您希望将进程限制在可用CPU的子集上运行,请取消选中“所有处理器”,然后按需选择CPU。
在服务运行时,可以通过Windows任务管理器更改进程优先级和亲和性。
等效命令:
nssm set UT2003 AppPriority NORMAL_PRIORITY_CLASS
nssm set UT2003 AppNoConsole 0
nssm set UT2003 AppAffinity All

关机选项卡 shutdown
关机选项卡列出了在应用程序崩溃后或服务被正常停止时用于整理应用程序的各种停止方法和超时。
等效命令:
nssm set UT2003 AppStopMethodSkip 0
nssm set UT2003 AppStopMethodConsole 1500
nssm set UT2003 AppStopMethodWindow 1500
nssm set UT2003 AppStopMethodThreads 1500

退出操作选项卡 exit actions
退出操作选项卡可用于调整服务的重新启动节流和退出时的默认操作。您还可以指定应用程序自动重新启动之间的强制延迟。
要为特定应用程序退出代码配置退出操作,必须像下面描述的方式使用注册表。
等效命令:
nssm set UT2003 AppThrottle 1500
nssm set UT2003 AppExit Default Restart
nssm set UT2003 AppRestartDelay 0

I/O选项卡
I/O选项卡可用于在启用I/O重定向时指定输入和/或输出文件。通常,设置输出和错误就足以捕获应用程序生成的日志消息。
要获得对路径和访问模式更多控制,请按照下面的描述在注册表中配置I/O。
等效命令:
nssm set UT2003 AppStdout C:\games\ut2003\service.log
nssm set UT2003 AppStderr C:\games\ut2003\service.log

文件轮转选项卡file rotation
文件轮转选项卡可与I/O设置配合使用,配置在服务重新启动时输出文件的轮转。
如果选中了"替换现有的输出文件"和/或"错误文件"复选框,nssm将在启动服务时覆盖现有的输出文件。默认情况下,它会追加到任何现有文件中。如果选中了"轮转文件"复选框,nssm将在设置I/O重定向之前对现有文件进行重命名。使用"限制轮转"字段可以禁用已经修改时间比指定秒数更近或者小于指定千字节大小的文件的轮转。
默认情况下,nssm仅在服务(重新)启动时执行文件轮转。要启用在服务运行期间达到指定大小限制时的文件轮转,请选中"服务运行时轮转"复选框。在线轮转忽略任何配置的文件年龄限制。
注意,在线轮转需要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
环境选项卡可用于指定传递给应用程序的换行分隔的环境变量列表。如果选中了"替换默认环境"复选框,则只传递指定的变量给服务。当未选中(默认情况下)时,将保留在服务启动时创建的环境。
等效命令:
nssm set <servicename> AppEnvironmentExtra JAVA_HOME=C:\java 通过命令行安装 从2.0版本开始,您还可以绕过GUI,从命令行安装服务。语法为:
nssm install <servicename> <application> [<options>] 请注意,实际输入到服务数据库中的程序是nssm本身,因此在安装服务后不得移动或删除nssm.exe。如果您确实希望更改nssm.exe的路径,则可以删除并重新安装服务,或者编辑HKLM\System\CurrentControlSet\Services\servicename\ImagePath以反映新位置。
引用问题 nssm可以正确处理带有空格的路径,但是由于命令提示符的工作方式,向其传递参数可能会有些棘手。
如果应用程序的路径包含空格,您需要将其包含在引号中,否则命令提示符将解释该路径为两个参数。
nssm install <servicename> "C:\Program Files\app.exe" 如果您希望提供的选项之一包含空格,您也需要对其进行引用,并对引号本身进行引用。
nssm install <servicename> <application> """This is one argument""" Isaballa Sanfelipo提出了从批处理文件中安装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" 移除服务 删除服务的命令为:
nssm remove <servicename>
从版本2.0开始,您也可以通过命令行删除服务,命令如下:
nssm remove <servicename> confirm
nssm愉快地尝试移除任何服务,不仅仅是nssm本身管理的服务。请尽量不要删除您不应该删除的服务...
服务关闭 当nssm从Windows服务管理器接收到停止命令,或者检测到被监控应用程序已退出时,它会尝试优雅地关闭被监控的应用程序及其所有子进程。如果应用程序的进程树不能及时退出,nssm可以强制终止属于应用程序的所有进程和子进程。
nssm可以使用四个阶段来关闭应用程序,默认情况下,它将按顺序尝试所有四种方法。可以(虽然不建议)禁用一些或所有方法的使用。不同的应用程序对各种请求的响应不同,因此通常最好保持所有方法都启用,以确保应用程序正常关闭。
首先,nssm将尝试生成一个Control-C事件并将其发送到应用程序的控制台。批处理脚本或控制台应用程序可能会拦截事件并自行优雅地关闭。Java应用程序往往对Control-C事件有良好的响应。GUI应用程序没有控制台,不会对此方法做出响应。不支持Windows 2000。
其次,nssm将枚举应用程序创建的所有窗口,并向它们发送WM_CLOSE消息。应用程序可能遵循响应消息并启动优雅退出的惯例。
第三,nssm将枚举应用程序创建的所有线程,并向它们发送WM_QUIT消息,如果应用程序有线程消息队列,就会接收到该消息。
作为最后的手段,nssm可以调用TerminateProcess()请求操作系统强制终止应用程序。TerminateProcess()调用无法被捕获或忽略,所以在大多数情况下,应用程序将被终止。但是,在它退出之前,它不太可能能够执行任何清理操作。
要禁用上述任何方法,需要创建一个整数(REG_DWORD)值HKLM\System\CurrentControlSet\Services\servicename\Parameters\AppStopMethodSkip,并将其设置为下面数字之一或多个的总和。
1 - 不要向控制台发送Control-C。
2 - 不要向窗口发送WM_CLOSE。
4 - 不要向线程发送WM_QUIT。
8 - 不要调用TerminateProcess()。
例如,如果您知道一个应用程序不响应Control-C并且没有线程消息队列,您可以将AppStopMethodSkip设置为5。
强烈建议不要禁用TerminateProcess()调用。当服务停止时,nssm将退出。如果在发生这种情况之前应用程序没有被终止,它可能会继续运行,而nssm将不再能够控制它。
默认情况下,nssm在尝试上述每种方法后会等待最多1500毫秒让应用程序退出。可以通过在注册表的HKLM\System\CurrentControlSet\Services\servicename\Parameters下创建整数(REG_DWORD)值,并将其设置为所需的毫秒数来配置每种方法的超时时间。
AppStopMethodConsole - 发送Control-C后等待的时间。
AppStopMethodWindow - 发送WM_CLOSE后等待的时间。
AppStopMethodThreads - 发送WM_QUIT后等待的时间。
请注意,超时时间适用于应用程序生成的所有进程,因此如果应用程序有多个子进程,总超时时间可能会比预期的长。
退出操作 要配置应用程序退出时 nssm 应该采取的操作,编辑注册表中键 HKLM\System\CurrentControlSet\Services\servicename\Parameters\AppExit 的默认值。如果 nssm 运行时注册表中不存在该键,它将创建该键并将值设为 Restart。将其更改为 Ignore 或 Exit 以指定所采取的操作。nssm 只有在该键不存在时才会创建此键。您的更改不会被覆盖。
要为特定退出代码指定不同的操作,创建一个字符串(REG_SZ)值,位于 AppExit 键下,其名称是要考虑的退出代码。例如,要在退出代码为 0 时停止服务(通常表示应用程序成功完成),请创建 HKLM\System\CurrentControlSet\Services\servicename\Parameters\AppExit\0 并将其设置为 Exit。查看事件日志中来自 nssm 的消息,了解您的应用程序返回的退出代码。
如果您的应用程序的退出代码与注册表条目不对应,nssm 在决定如何处理时将使用 AppExit 的默认值。
重启延迟 从版本 2.22 开始,nssm 可以在重新启动应用程序之间应用强制延迟。例如,这可以用于定期运行命令,比如每小时运行一次批处理脚本。
要指定重新启动延迟,创建一个整数(REG_DWORD)值 HKLM\System\CurrentControlSet\Services\servicename\Parameters\AppRestartDelay,并将其设置为重新启动之间等待的毫秒数。
服务在等待下一次重启时会报告其状态为暂停。发送 Continue 控件将暂时取消延迟并立即触发重新启动。
有关 nssm 在配置了节流和重启延迟时的工作方式的注意事项,请参阅下面的重启节流部分。
重启节流 为避免紧凑的 CPU 循环,如果监视的应用程序在启动后过早退出,nssm 将节流服务的重启。默认情况下,使用 1500 毫秒的阈值。要指定不同的值,请创建一个整数(REG_DWORD)值 HKLM\System\CurrentControlSet\Services\servicename\Parameters\AppThrottle,并将其设置为所需的毫秒数。
第一次重启将尝试不延迟。如果重启后的应用程序继续在运行时间未达到阈值的毫秒数而退出,nssm 将至少暂停 2000 毫秒,对于每次后续失败会使暂停时间加倍。它将最长暂停 256000 毫秒,大约四分钟。当服务成功运行至少达到阈值时间时,延迟计数器将被重置。
如果确定了服务失败的原因并采取措施来纠正问题,可以向服务发送 Continue 控件,服务状态将显示为暂停。通过这种方式,您可以避免等待下一次重新启动尝试。
当配置了重新启动延迟且应用程序过早退出时,nssm 将根据配置的延迟和计算出的节流时间中较长的时间来节流重启。例如,如果配置了 3000 毫秒的重启延迟,并且服务在每次启动时失败,那么第一次重启尝试将延迟 3000 毫秒,因为配置的 3000 毫秒比 0 毫秒的节流更长。第二次尝试也将延迟 3000 毫秒;3000 毫秒配置再次比 2000 毫秒的节流更长。第三次尝试将延迟 4000 毫秒;比配置的 3000 毫秒更长。
因此,如果打算使用重启延迟来配置间隔小于五分钟的短时服务,应考虑降低 AppThrottle 的值。
进程优先级和 CPU 亲和性 从版本 2.22 开始,nssm 可以管理受管应用程序的 CPU 亲和性和进程优先级。
默认情况下,应用程序将以正常进程优先级启动,并且被允许在任何 CPU 上执行。nssm 将查看 HKLM\System\CurrentControlSet\Services\servicename\Parameters 下的注册表条目以配置应用程序启动。
如果设置了整数(REG_DWORD)值 AppPriority,nssm 将解释其值为 SetPriorityClass() 的参数,并以指定的优先级启动应用程序。
如果设置了字符串(REG_SZ)值 AppAffinity,nssm 将将其解释为一个以逗号分隔的 CPU ID 列表,从 0 开始,表示应用程序可以在哪些 CPU 上运行。也可以通过用短划线分隔索引来指定 ID 的范围。
在亲和性字符串中,只有数字、短划线和逗号是有效的。
例如,字符串 0-2,4 指定应用程序可以在系统中的第一、第二、第三和第五个 CPU 上运行。
控制台窗口 从版本 2.22 开始,nssm 默认会为应用程序创建一个新的控制台窗口。这使得一些本来会失败的程序能够正常工作,比如那些希望能够读取用户输入的程序。如果不需要控制台窗口,可以通过将整数(REG_DWORD)值 AppNoConsole 设置为非零值来禁用控制台窗口,该值位于 HKLM\System\CurrentControlSet\Services\servicename\Parameters 下。
I/O重定向
nssm可以将托管应用程序的I/O重定向到任何可以由CreateFile()打开的路径。如果您的应用程序期望能够记录到控制台,则此功能可能很有用。
nssm将查找HKLM\System\CurrentControlSet\Services\servicename\Parameters下对应于CreateFile()参数的键。所有都是可选的。如果没有为特定流给出路径,它将不会被重定向。如果给出了路径但没有其他值,则它们将接收合理的默认值。
AppStdin(字符串)-用于接收输入的路径。
AppStdinShareMode(整数)-输入的ShareMode参数。
AppStdinCreationDisposition(整数)-输入的CreationDisposition参数。
AppStdinFlagsAndAttributes(整数)-输入的FlagsAndAttributes参数。
AppStdout(字符串)-用于接收输出的路径。
AppStdoutShareMode(整数)-输出的ShareMode参数。
AppStdoutCreationDisposition(整数)-输出的CreationDisposition参数。
AppStdoutFlagsAndAttributes(整数)-输出的FlagsAndAttributes参数。
AppStderr(字符串)-用于接收错误输出的路径。
AppStderrShareMode(整数)-错误输出的ShareMode参数。
AppStderrCreationDisposition(整数)-错误输出的CreationDisposition参数。
AppStderrFlagsAndAttributes(整数)-错误输出的FlagsAndAttributes参数。
通常建议同时设置AppStdout和AppStderr以记录输出,因为应用程序可能会分别记录信息和错误消息。
可以将stderr和stdout定向到相同的路径,但由于nssm的限制,您必须在AppStdout和AppStderr注册表值中提供完全相同的字符串。仅当两个条目完全相同时,nssm才能交错这两个流。
文件旋转
从版本2.22开始,如果启用了I/O重定向,则在启动应用程序之前,nssm可以旋转现有的输出文件。 nssm还可以在服务运行时旋转文件。请参见下面的在线旋转。
要启用旋转,请创建一个整数(REG_DWORD)值HKLM\System\CurrentControlSet\Services\servicename\Parameters\AppRotate,并将其设置为1。在(重新)启动服务之前,如果已经存在,则nssm将旋转配置为AppStdout和/或AppStderr的文件。
现有文件将根据使用文件的最后修改时间的模板进行重命名。例如,C:\Services\myservice.log可能会被旋转到C:\Services\myservice-20140114T180840.953.log。
请注意,时间戳采用ISO8601格式,因此按名称排序的旋转文件列表将首先显示最旧的文件,它包括毫秒部分,因此如果服务在不到一秒钟的时间内退出并重新启动,则不会丢失文件。
在HKLM\System\CurrentControlSet\Services\servicename\Parameters下,可以使用两个额外的注册表设置来调整nssm旋转文件的方式。
如果设置了整数(REG_DWORD)值AppRotateSeconds,则nssm不会旋转在上次修改时间少于配置的秒数之前修改的任何文件。
如果设置了整数(REG_DWORD)值AppRotateBytes,则nssm不会旋转小于配置的字节数的任何文件。 nssm还可以处理文件大小过大而无法用32位表示的文件,以防您决定允许日志文件增长到4GB大小,但更大则太大。 AppRotateBytesHigh的值将被解释为64位大小的高阶部分。
如果同时设置了AppRotateSeconds和AppRotateBytes(High),则nssm将要求满足两个条件才能旋转文件。
在线旋转
如果将整数(REG_DWORD)值AppRotateOnline设置为1,则nssm可以在服务运行时旋转增长到配置文件大小限制的文件。 AppRotateSeconds的值被忽略以进行在线旋转,但仍将适用于(重新)启动服务之前的旋转。
如果未设置AppRotate,则忽略AppRotateOnline。
当启用在线旋转时,nssm会读取应用程序的标准输出和/或标准错误,并自己编写输出文件。与简单的I/O重定向相比,这样做引入了一定的复杂性,因此不应用于不需要它的服务。虽然nssm将尝试优雅地处理I/O错误,但如果出现问题,直到重新启动服务,应用程序的输出可能会丢失。有关nssm如何处理I/O重定向的更多详细信息,请参见技术讨论。
按需旋转
nssm可以按需旋转输出文件,而不考虑它们是否已达到配置的大小限制。要请求服务的文件旋转,请发送用户定义的服务控件128或运行以下命令:
nssm rotate <servicename>
按需旋转的限制是,实际文件重命名不会发生,直到读取应用程序的下一行输入为止。因此,根据应用程序的详细程度,发出旋转请求和进行旋转之间可能会有相当长的延迟时间。
即使未配置AppRotateBytes,即如果服务在运行时不会旋转文件,按需旋转也将起作用。但是,除非同时配置了AppRotate和AppRotateOnline,否则它将不起作用。
I/O重定向技术细节
在查看服务如何处理I/O时,有三种情况需要考虑。
不重定向
在最简单的情况下,nssm没有配置任何I/O重定向。它将使用stdin,stdout和stderr连接到控制台实例启动应用程序。如果服务在LOCALSYSTEM帐户下运行并配置为与桌面交互,则您可能可以直接查看输出。
I/O重定向;禁用在线旋转
如果已重定向stdout和/或stderr,并且已禁用在线旋转,则nssm将调用CreateFile()为每个I/O流打开一个句柄,然后调用DuplicateHandle()在传递给CreateProcess()的STARTUPINFO数据结构中设置句柄的副本。因此,应用程序将使用打开的文件句柄运行,而nssm本身没有打开的句柄。
这种情况是三种情况中最复杂的,因此也是最容易出现问题的情况,可能导致应用程序输出丢失。
首先,nssm调用CreateFile(),就像前面的情况一样。然后,它调用CreatePipe()打开一个匿名管道。管道的读取端和输出文件的句柄被传递给一个新线程,该线程执行实际的写入操作。管道的写入端使用DuplicateHandle()进行复制,以便传递给CreateProcess()。因此,应用程序将使用打开的文件句柄运行,而nssm本身则具有对管道的另一端和输出文件的句柄。
写入线程运行一个简单的循环,它从管道中(即应用程序的输出)使用ReadFile()将数据读入缓冲区,然后使用WriteFile()将缓冲区的内容写入输出文件。如果文件达到配置的大小限制,线程将写入直到下一个换行符,关闭其输出句柄,旋转文件并打开一个新的句柄以继续写入新文件。
当nssm收到按需旋转请求时,它会设置一个标志,指示写入线程在下一次ReadFile()调用完成后执行旋转,而不考虑文件大小。由于ReadFile()会阻塞执行直到读取到数据,nssm直到应用程序产生下一行输出才会实际进行文件旋转。
nssm不知道应用程序的输出是Unicode还是ANSI编码,因此在写入第一个数据到文件之前或旋转之前,它调用IsTextUnicode()尝试确定正在使用的文本编码。如果(看起来)是Unicode,nssm会在新文件的开头写入一个UTF-16字节顺序标记,以便在使用文本编辑器打开时能够正确读取。
如果同时重定向了stdout和stderr,并且分别重定向到不同的文件中,nssm将为每个流生成一个写入线程。如果不幸地(或出于恶意)运行一个应用程序,它在stdout中写入Unicode,并在stderr中写入ANSI - 或者反过来 - nssm也可以处理这种情况。
从上面可以明显看出,在线旋转存在许多问题。nssm将尝试优雅地处理I/O过程中的任何问题,但为了安全起见,除非您的输出如此庞大以至于别无选择,否则请考虑不要使用在线旋转。
环境变量 从版本2.11开始,nssm支持srvany支持的AppEnvironment注册表值。要指定要传递给监视应用程序的环境变量列表,请创建一个多值字符串(REG_MULTI_SZ)值HKLM\System\CurrentControlSet\Services\servicename\Parameters\AppEnvironment,其中每个条目的格式为KEY=VALUE。
如果您只想让环境变量KEY存在,可以省略VALUE,但=符号是必需的。如果指定了无效的环境变量,则服务将无法运行!
从版本2.19开始,nssm还支持AppEnvironmentExtra注册表值,其格式与AppEnvironment相同。在AppEnvironmentExtra中设置的环境变量将添加到服务的默认环境中。
为了与srvany兼容,AppEnvironment中指定的环境变量将替换系统在服务启动时设置的变量。由于这可能并非您想要的行为,请改用AppEnvironmentExtra。
命令行管理服务 nssm的核心功能始终可以通过命令行使用。
安装服务 nssm install <servicename> nssm install <servicename> <program>
nssm install <servicename> <program> [<arguments>] 默认情况下,服务的启动目录将设置为包含程序的目录。
可以在安装服务后覆盖启动目录。
nssm set <servicename> AppDirectory <path> 删除服务
nssm remove nssm remove <servicename>
nssm remove <servicename> confirm
服务管理 从版本2.22开始,nssm提供基本的服务管理功能。
nssm还可以在期望服务名称的任何位置接受服务显示名称,因为Windows不允许服务的名称或显示名称与其他服务的名称或显示名称冲突。
服务名称(也称为服务键名)和其显示名称都唯一标识一个服务。
启动和停止服务 nssm start <servicename>
nssm stop <servicename>
nssm restart <servicename> 查询服务状态
nssm status <servicename> 向服务发送控制命令
nssm pause <servicename> nssm continue <servicename>
nssm rotate <servicename> nssm rotate会根据需要旋转具有I/O重定向和在线旋转功能的nssm服务的输出文件。
nssm接受用户自定义的控制码128作为启动输出文件旋转的信号。
非nssm服务可能会以自己的方式响应控制码128(或忽略它,或崩溃)。
编辑服务 从版本2.22开始,可以在命令行上查询或配置nssm可以理解的所有参数。某些系统参数也可以查询,并且在某些情况下可以修改。
通用语法 通常可以使用以下方式查询参数。
nssm get <servicename> <parameter> 某些参数存在歧义,需要使用子参数。请参见下面的示例。
nssm get <servicename> <parameter> <subparameter> 通常可以使用类似的方式设置参数。
nssm set <servicename> <parameter> <value>
nssm set <servicename> <parameter> <subparameter> <value>
大多数参数可以重置为默认值,这相当于删除相关的注册表项。
nssm reset <servicename> <parameter>
nssm reset <servicename> <parameter> <subparameter> 作为便利,nssm会接受除所需值之外的其他参数,并将它们连接在一起,用单个空格分隔。因此,以下两个命令是相同的:
nssm set <servicename> AppParameters "-classpath C:\Classes"
nssm set <servicename> AppParameters -classpath C:\Classes 参数 参数通常是与控制相关功能的注册表项同名的字符串。例如,以下命令设置服务的启动目录:
nssm set <servicename> AppDirectory <path> 值 大多数参数通过设置与相关注册表项文档中记录的相同值来配置。例如,要启用文件旋转,可以使用以下命令:
nssm set <servicename> AppRotation 1 以下是以不同方式设置值的参数列表。
本地参数 某些参数配置的是服务本身的属性,而不是nssm的行为。它们也以关联的注册表值命名。
DependOnGroup:在服务启动之前必须启动的加载顺序组的成员。
DependOnService:在服务启动之前必须启动的服务。
Description:服务的描述。
DisplayName:服务的显示名称,例如"应用层网关服务"。在服务管理器(services.msc)的"名称"列下显示此名称。
ImagePath:服务可执行文件的路径,例如"C:\Windows\System32\alg.exe"。对于nssm服务,这将是nssm.exe的路径。
ObjectName:服务运行的用户帐户名称。默认为LOCALSYSTEM。
Name:服务键名,例如"ALG"。键名无法更改。可以使用 nssm get <displayname> Name 命令查找服务的键名。
Start:服务的启动类型,例如"自动"。
Type:服务类型。nssm只能编辑SERVICE_WIN32_OWN_PROCESS类型的服务。
非标准参数
在与nssm get一起使用时,AppEnvironment和AppEnvironmentExtra接受一个可选的子参数。如果没有提供子参数,nssm get会按KEY=VALUE的形式每行打印一个已配置的环境变量。如果给出了子参数,nssm get将打印为该命名环境变量配置的值,或者如果该变量不存在于环境块中,则打印空字符串。
例如,假设AppEnvironmentExtra配置了两个变量,CLASSPATH=C:\Classes和TEMP=C:\Temp。以下调用:
nssm get <servicename> AppEnvironmentExtra 将打印:
CLASSPATH=C:\Classes TEMP=C:\Temp 而以下语法:
nssm get <servicename> AppEnvironmentExtra CLASSPATH 将打印:
C:\Classes 当使用nssm set设置环境块时,每个变量都应在单独的参数中指定为KEY=VALUE对。例如:
nssm set <servicename> AppEnvironmentExtra CLASSPATH=C:\Classes TEMP=C:\Temp AppExit参数需要指定要获取或设置的退出代码的子参数。可以使用字符串Default指定默认操作。
例如,要获取服务的默认退出操作,应运行:
nssm get <servicename> AppExit Default 要获取应用程序以退出代码2退出时的退出操作,请运行:
nssm get <servicename> AppExit 2 请注意,如果未为指定的退出代码配置显式操作,则nssm将打印默认退出操作。
要配置服务在应用程序以退出代码2退出时停止,请运行:
nssm set <servicename> AppExit 2 Exit AppPriority参数需要一个优先级类常量,如SetPriorityClass()文档中所述。有效优先级为:
REALTIME_PRIORITY_CLASS HIGH_PRIORITY_CLASS
ABOVE_NORMAL_PRIORITY_CLASS
NORMAL_PRIORITY_CLASS
BELOW_NORMAL_PRIORITY_CLASS
IDLE_PRIORITY_CLASS
非标准本机参数
当与nssm set一起使用时,DependOnGroup和DependOnService参数将每个后续命令行参数视为依赖组或服务。
组可以使用或不使用SC_GROUP_IDENTIFIER前缀(+符号)来指定。服务可以通过其键名或显示名称指定。
以下两个调用是等效的:
nssm set <servicename> DependOnService RpcSS LanmanWorkstation
nssm set <servicename> DependOnService "Remote Procedure Call (RPC)" LanmanWorkstation
在使用nssm get查询时,组将始终以SC_GROUP_IDENTIFIER前缀开头。
在与nssm set一起使用时,ObjectName参数需要一个额外的参数,用于指定运行服务的用户密码。
要检索用户名,请运行:
nssm get <servicename> ObjectName 要设置用户名和密码,请运行:
nssm set <servicename> ObjectName <username> <password> 请注意,参数连接的规则仍然适用。以下调用将产生预期的效果:
nssm set <servicename> ObjectName <username> correct horse battery staple 如果您绝对必须配置一个空密码的帐户,请运行:
nssm set <servicename> ObjectName <username> "" Start参数的有效值为:
SERVICE_AUTO_START:在启动时自动启动。
SERVICE_DELAYED_AUTO_START:延迟启动。
SERVICE_DEMAND_START:手动启动。
SERVICE_DISABLED:服务已禁用。 请注意,
SERVICE_DELAYED_AUTO_START不受支持在Vista之前的Windows版本上。
如果延迟启动不可用,nssm会将服务设置为自动启动。
Type参数用于查询或设置服务类型。nssm识别所有当前记录的服务类型,但只允许设置两种类型之一:
SERVICE_WIN32_OWN_PROCESS:独立服务。这是默认设置。 SERVICE_INTERACTIVE_PROCESS:可以与桌面交互的服务。
只有在LOCALSYSTEM帐户下运行时,才能将服务配置为交互式。
为了确保成功配置交互式服务,请按顺序运行两个命令:
nssm reset <servicename> ObjectName
nssm set <servicename> Type SERVICE_INTERACTIVE_PROCESS
使用案例 管理应该持续运行的服务 按照使用说明中的描述安装服务。如果您的应用程序出现故障或崩溃,nssm将尝试重新启动它。
将脚本作为服务运行 您不仅限于运行标准可执行文件作为服务,nssm还可以管理脚本。只需配置到您的bat或cmd脚本的路径,它就会正确运行。
在系统启动时运行工具或脚本一次 安装服务,然后打开注册表,并按照使用说明中的描述将退出操作配置为忽略。如果您希望nssm重试您的脚本直到成功,创建一个与成功退出代码相对应的注册表项,并将其设置为忽略,默认为重新启动。
自定义服务失败时采取的操作 请注意,对于早于Vista版本的Windows来说,所需的步骤略有不同。
Windows服务管理器能够在服务退出时采取不同的操作。请参阅服务属性窗口的"恢复"选项卡以了解更多详细信息。Windows可以重新启动服务、调用程序或脚本,甚至重新启动计算机。然而,默认情况下,它不会采取任何操作,如果不知道应用程序是否实际停止,也无法采取任何操作,这是srvany的一个大弱点。
安装服务并将退出操作设置为"Exit",以使nssm可靠地报告服务失败,然后通过Windows配置您首选的服务恢复操作。
如果您使用的是早于Vista的Windows版本,则以上操作是不够的。即使nssm报告服务以错误停止,服务管理器也不会应用恢复操作,因为它认为服务是正常停止的。如果要恢复服务,必须将nssm的退出操作设置为"Suicide",以模拟崩溃。如果希望在应用程序正常退出时采取恢复操作,还必须将退出代码0的动作显式设置为"Suicide"。
在使用srvany的位置使用nssm 如果您已经使用instsrv和srvany组合来运行您的服务,nssm几乎可以作为替代品。停止您的服务,然后编辑注册表,将HKLM\System\CurrentControlSet\Services\servicename\ImagePath更改为X:\path\to\nssm.exe,其中X:\path\to是您安装nssm的位置。
请注意,与srvany不同,nssm将无法更改到AppDirectory注册表设置中指定的目录错误视为错误。
如果nssm无法访问AppDirectory,则服务将无法启动。另一方面,srvany将启动但将从%SYSTEMROOT%中运行。如果配置的目录无效,nssm将在事件日志中记录一个错误。
请记住,网络驱动器是按用户配置的,除非您明确配置,否则服务将在LOCALSYSTEM账户下运行。尝试将网络驱动器(例如z:\)配置为服务的AppDirectory可能会失败。形式为\server\share的UNC路径是可以的。



浙公网安备 33010602011771号