在Windows操作系统上创建和管理服务的工具,它们各自有不同的特点和用途
在Windows操作系统上创建和管理服务的工具,它们各自有不同的特点和用途。
-
XYNTservice: XYNTservice 是一个开源的软件,它可以将任何可执行文件转换为 Windows 服务。通过 XYNTservice,你可以将你的应用程序注册为 Windows 服务,使其能够在系统启动时自动运行,并以服务的身份在后台运行,而无需用户登录。这对于需要长时间运行或需要在系统启动时自动启动的应用程序来说非常有用。GitHub - dalfa/XYNTService: XYNTService
-
NSSM (Non-Sucking Service Manager): NSSM 也是一个开源的软件,它提供了一种在 Windows 上管理服务的方式。NSSM 可以将任何可执行文件包装成 Windows 服务,并提供了一些额外的功能,如重启策略、输入/输出重定向、环境变量配置等。NSSM 的目标是提供一种更加灵活和强大的服务管理方式,使得用户可以更方便地配置和管理他们的服务程序。NSSM - the Non-Sucking Service Manager GitHub - xxnuo/Nssm-Chinese: Nssm_ ch - Windows 系统服务管理器 提供GUI管理Win系统服务的添加、修改、删除
-
WinSW (Windows Service Wrapper): WinSW 也是一个开源的软件,它的设计目标是简化 Windows 服务的创建和管理。WinSW 提供了一个 XML 配置文件来定义服务,支持自动重新启动、定时任务、日志记录等功能,并且可以很容易地集成到现有的应用程序中。使用 WinSW,你可以快速地将你的应用程序打包成 Windows 服务,并且通过配置文件来定义服务的行为。GitHub - winsw/winsw: A wrapper executable that can run any executable as a Windows service, in a permissive license.
-
srvany: Srvany 是微软提供的一个工具,它可以将任何可执行文件注册为系统服务。使用 Srvany,你可以在注册服务时指定需要运行的可执行文件,以及启动参数等信息。虽然 Srvany 功能比较简单,但对于一些基本的需求来说是一个有效的解决方案。创建用户定义的服务 - Windows Client | Microsoft Learn
-
sc.exe: sc.exe 是 Windows 系统自带的命令行工具,用于与服务相关的操作。通过 sc.exe,你可以创建、删除、启动、停止、暂停、恢复服务等。虽然 sc.exe 的使用相对较为繁琐,但它是 Windows 系统自带的工具,对于一些简单的服务管理操作来说是一个方便的选择。sc.exe create | Microsoft Learn
-
FireDaemon: FireDaemon 是一个商业软件,它可以将任何应用程序转换成 Windows 服务。FireDaemon 提供了丰富的功能,如自动重新启动、CPU 亲和性、内存限制等,并且支持远程管理和监控。虽然 FireDaemon 是商业软件,但它提供了免费试用版,可以在一定期限内使用。Run Any Application Program Script as FireDaemon Windows Service
-
AlwaysUp: AlwaysUp 是另一个商业软件,它可以将任何应用程序转换成 Windows 服务。AlwaysUp 提供了类似于 FireDaemon 的功能,如自动重新启动、CPU 亲和性、内存限制等,并且支持远程管理和监控。与 FireDaemon 不同的是,AlwaysUp 还提供了一些高级功能,如邮件通知、事件日志记录等。https://www.coretechnologies.com/products/AlwaysUp/
-
Microsoft Windows Services for Unix: Microsoft Windows Services for Unix 是微软提供的一个工具,它可以在 Windows 系统上运行类 Unix 环境下的应用程序。通过 Windows Services for Unix,你可以将类 Unix 环境下的应用程序注册为 Windows 服务,并且在 Windows 系统上以服务的身份运行。Windows Services for Unix 适用于需要在 Windows 系统上运行 Unix 应用程序的场景。
-
Service Protector: Service Protector 是一个商业软件,它可以确保你的Windows服务始终保持运行状态。它可以监控你的服务,如果服务意外停止,它可以自动重新启动服务,从而确保你的应用程序始终可用。Service Protector 9.0: Easily Import Many Windows Services | The Core Technologies Blog
-
Instsrv.exe和Srvinstw.exe: 这是微软提供的两个命令行工具,用于安装和卸载服务。通过这两个工具,你可以将可执行程序安装为Windows服务,并且配置服务的相关信息。https://learn.microsoft.com/zh-cn/windows-hardware/get-started/kits-and-tools-overview
-
AppToService:
将任何应用程序作为Windows服务运行,使其在计算机启动时自动启动,无需登录;在没有人工干预的情况下持续运行24/7;能够在注销/登录过程中保持运行;在后台默默地执行;并能安全地在受保护的账户下运行。
AppToService 可以将任何应用程序作为Windows服务运行 AppToService 是一个Windows控制台应用程序,允许您将程序、脚本、批处理文件、快捷方式及其他类型的应用程序作为Windows服务运行。这样您就可以享受Windows服务带来的一些好处,比如:
在计算机启动时无需用户交互或登录即可启动应用程序。 在后台默默运行,不会干扰用户。 能够在注销/登录过程中继续运行。 在失败时能够自动重新启动。 以指定的用户账户运行,以确保安全性。 AppToService 让任何应用程序像服务一样运行。AppToService - Run applications as Windows services | Basta
要创建一个带有看门狗功能的服务,可以使用以下步骤:
-
创建服务: 使用适合你的工具(如sc.exe、srvany等)将你的可执行文件注册为Windows服务。确保你的可执行文件能够在服务模式下正确运行。
-
实现看门狗功能: 在你的可执行文件中实现看门狗功能,定期检测指定进程是否在运行。如果进程不在运行,你的可执行文件应该能够自动重新启动该进程。
这可以通过以下步骤来实现:
- 在你的可执行文件中使用进程监控机制,例如轮询或订阅进程状态变化的事件。
- 定期检查指定进程是否在运行。你可以使用进程列表或进程ID等信息来判断进程是否存在。
- 如果进程不在运行,使用适当的方法(如启动命令行、API调用等)重新启动该进程。
-
设置定期检测时间间隔: 在你的可执行文件中,设置定期检测进程状态的时间间隔。你可以根据实际需求选择适当的时间间隔,以确保及时检测并重新启动进程。
-
在 PowerShell 中可以通过以下代码实现上述功能:
powershell
# 指定进程名称和可执行文件路径
$processName = "YourProcessName"
$exePath = "C:\Path\To\YourExecutable.exe"
# 定义函数,检查进程是否在运行
function CheckProcessRunning($processName) {
if(Get-Process | Where-Object {$_.Name -eq $processName}) {
return $true
} else {
return $false
}
}
# 定义函数,启动进程
function StartProcess($exePath) {
Start-Process -FilePath $exePath -ArgumentList "-arg1", "-arg2" -NoNewWindow
}
# 检查进程是否在运行
if(!CheckProcessRunning($processName)) {
# 如果进程不在运行,启动进程
StartProcess($exePath)
}
在上面的代码中,首先指定了要检查的进程名称和重新启动的可执行文件路径。然后定义了两个函数,分别用于检查进程是否在运行和启动进程。最后在代码中使用这两个函数来检查进程状态并重新启动进程(如果需要)。
当然,这只是一种示例方法,具体的实现方式可能因应用程序的要求而有所不同,例如监控进程状态的频率、重新启动进程的方式等。
在批处理中,可以使用以下代码实现上述功能:
@echo off
REM 指定进程名称和可执行文件路径
set processName=YourProcessName
set exePath=C:\Path\To\YourExecutable.exe
:loop
REM 检查进程是否在运行
tasklist | find /i "%processName%" > NUL
if errorlevel 1 (
REM 如果进程不在运行,启动进程
start "" "%exePath%"
)
REM 设置检测间隔(单位:秒)
timeout /t 60 > NUL
goto loop
在上面的代码中,首先指定了要检查的进程名称和重新启动的可执行文件路径。然后使用一个无限循环来定期检查进程状态。循环中使用 tasklist 命令和 find 命令来检查进程是否在运行,如果进程不在运行,则使用 start 命令重新启动进程。最后使用 timeout 命令来设置检测间隔,以确保及时检测并重新启动进程。
创建带有看门狗功能的服务的工具有很多,下面列举几个常用的工具:
-
NSSM(Non-Sucking Service Manager):NSSM 是一个开源的 Windows 服务管理器,可以将任何可执行文件转换为服务。它提供了看门狗功能,可以监控服务的状态,并在服务崩溃或停止时重新启动。
-
srvany:srvany 是 Windows 平台上的一个实用工具,可以将任何可执行文件注册为服务。虽然它不直接提供看门狗功能,但你可以在自己的可执行文件中实现该功能。
-
AlwaysUp:AlwaysUp 是一个商业化的 Windows 服务管理工具,提供了丰富的功能,包括看门狗功能。它可以监控服务的运行状态,并在服务停止时自动重启。
-
FireDaemon:FireDaemon 是另一个商业化的 Windows 服务管理工具,可以将任何应用程序转换为 Windows 服务。它支持看门狗功能,并提供了各种监控和报警选项。
这些工具都提供了更便捷的方式来创建、管理和监控带有看门狗功能的服务。你可以根据自己的需求和预算选择适合你的工具。
https://www.technlg.net/windows/download-windows-resource-kit-tools/