Windows Server 2022 新的服务管理 API 提供了更多的选项和功能,可以更灵活地进行服务操作。这些 API 可以用于编写自定义工具和脚本,以便更好地管理 Windows Server 中的服务
sc
命令是 Windows 操作系统自带的一种命令行实用程序,用于创建、删除、启动、停止以及配置 Windows 服务。通过sc
命令,您可以直接将可执行文件注册为服务,而不需要第三方工具的帮助。sc
命令提供了丰富的选项,如启动类型、依赖关系、服务描述等。instsrv
和srvany
是两个第三方工具,用于将任何应用程序转换为 Windows 服务。instsrv
工具将可执行文件注册为服务,然后使用srvany
工具将该服务绑定到您要运行的应用程序上。通过这种方法,您可以将几乎任何应用程序转换为 Windows 服务,包括那些没有内置服务支持的应用程序。-
Winsw: Winsw 是一个开源的 Windows 服务包装器,它允许将任何可执行文件转换为 Windows 服务。Winsw 提供了丰富的配置选项,支持设置服务依赖、环境变量等功能。
Windows Server 2022 新的服务管理 API 提供了更多的选项和功能,可以更灵活地进行服务操作。这些 API 可以用于编写自定义工具和脚本,以便更好地管理 Windows Server 中的服务。以下是一些使用这些 API 的工具示例:
-
Nssm:Nssm 是一个开源工具,用于将任何可执行文件作为 Windows 服务运行。它使用 Windows Server 2022 新的服务管理 API 来创建、配置和管理服务。Nssm 还提供了许多其他功能,例如日志记录、重试机制和进程监控等。
-
WinSW:WinSW 是一个类似于 Nssm 的开源工具,它使用 Windows Server 2022 新的服务管理 API 来创建、配置和管理服务。WinSW 还支持参数传递、环境变量设置和启动脚本等功能。
-
sc.exe:sc.exe 是 Windows Server 2022 自带的命令行工具,用于安装、配置和管理服务。它使用 Windows Server 2022 新的服务管理 API 来实现这些操作。sc.exe 还支持查询服务状态、删除服务等功能。
-
PowerShell:PowerShell 是一种强大的脚本语言和命令行工具,可以使用 Windows Server 2022 新的服务管理 API 来编写和执行服务管理脚本。PowerShell 提供了许多内置命令和函数,可以轻松地创建、配置和管理 Windows 服务。
-
Sysinternals Suite:Sysinternals Suite 是微软提供的一组系统工具集合,其中包含了许多实用程序,如 PsService、PsExec 等。这些工具可以帮助您管理 Windows 服务、进程和系统资源。
-
Windows Services Console:Windows 提供了一个标准的服务管理控制台,您可以通过运行 "services.msc" 命令来打开。在 Services Console 中,您可以查看、启动、停止和配置系统中安装的所有服务。
-
PowerShell Desired State Configuration (DSC):PowerShell DSC 是一种自动化配置管理工具,它可以使用 PowerShell 脚本定义系统的期望状态。通过编写 DSC 脚本,您可以配置和管理 Windows 服务以确保其符合您的预期状态。
-
Third-party Configuration Management Tools:许多第三方配置管理工具,如 Ansible、Chef、Puppet 等,提供了用于管理 Windows 服务的模块和插件。这些工具可以与 Windows Server 2022 的新服务管理 API 配合使用,实现自动化部署和配置管理。
描述:
SC 是用来与服务控制管理器和服务进行通信
的命令行程序。
用法:
sc <server> [command] [service name] <option1> <option2>...
<server> 选项的格式为 "\\ServerName"
可通过键入以下命令获取有关命令的更多帮助: "sc [command]"
命令:
query-----------查询服务的状态,
或枚举服务类型的状态。
queryex---------查询服务的扩展状态,
或枚举服务类型的状态。
start-----------启动服务。
pause-----------向服务发送 PAUSE 控制请求。
interrogate-----向服务发送 INTERROGATE 控制请求。
continue--------向服务发送 CONTINUE 控制请求。
stop------------向服务发送 STOP 请求。
config----------更改服务的配置(永久)。
description-----更改服务的描述。
failure---------更改失败时服务执行的操作。
failureflag-----更改服务的失败操作标志。
sidtype---------更改服务的服务 SID 类型。
privs-----------更改服务的所需特权。
managedaccount--更改服务以将服务帐户密码
标记为由 LSA 管理。
qc--------------查询服务的配置信息。
qdescription----查询服务的描述。
qfailure--------查询失败时服务执行的操作。
qfailureflag----查询服务的失败操作标志。
qsidtype--------查询服务的服务 SID 类型。
qprivs----------查询服务的所需特权。
qtriggerinfo----查询服务的触发器参数。
qpreferrednode--查询服务的首选 NUMA 节点。
qmanagedaccount-查询服务是否将帐户
与 LSA 管理的密码结合使用。
qprotection-----查询服务的进程保护级别。
quserservice----查询用户服务模板的本地实例。
delete ----------(从注册表中)删除服务。
create----------创建服务(并将其添加到注册表中)。
control---------向服务发送控制。
sdshow----------显示服务的安全描述符。
sdset-----------设置服务的安全描述符。
showsid---------显示与任意名称对应的服务 SID 字符串。
triggerinfo-----配置服务的触发器参数。
preferrednode---设置服务的首选 NUMA 节点。
GetDisplayName--获取服务的 DisplayName。
GetKeyName------获取服务的 ServiceKeyName。
EnumDepend------枚举服务依赖关系。
以下命令不需要服务名称:
sc <server> <command> <option>
boot------------(ok | bad)指示是否应将上一次启动另存为
最近一次已知的正确启动配置
Lock------------锁定服务数据库
QueryLock-------查询 SCManager 数据库的 LockStatus
示例:
sc start MyService
QUERY 和 QUERYEX 选项:
如果查询命令带服务名称,将返回
该服务的状态。其他选项不适合这种
情况。如果查询命令不带参数或
带下列选项之一,将枚举此服务。
type= 要枚举的服务的类型(driver, service, userservice, all)
(默认 = service)
state= 要枚举的服务的状态 (inactive, all)
(默认 = active)
bufsize= 枚举缓冲区的大小(以字节计)
(默认 = 4096)
ri= 开始枚举的恢复索引号
(默认 = 0)
group= 要枚举的服务组
(默认 = all groups)
语法示例
sc query - 枚举活动服务和驱动程序的状态
sc query eventlog - 显示 eventlog 服务的状态
sc queryex eventlog - 显示 eventlog 服务的扩展状态
sc query type= driver - 仅枚举活动驱动程序
sc query type= service - 仅枚举 Win32 服务
sc query state= all - 枚举所有服务和驱动程序
sc query bufsize= 50 - 枚举缓冲区为 50 字节
sc query ri= 14 - 枚举时恢复索引 = 14
sc queryex group= "" - 枚举不在组内的活动服务
sc query type= interact - 枚举所有不活动服务
sc query type= driver group= NDIS - 枚举所有 NDIS 驱动程序
- 使用 PowerShell 命令来监控和恢复服务:
# 获取服务状态
Get-Service -Name "YourServiceName"
# 如果服务停止,则启动服务
Start-Service -Name "YourServiceName"
- 使用 Windows 计划任务和批处理文件来定期检查服务状态并执行恢复操作。
创建一个批处理文件(例如 monitor_service.bat
),其中包含检查服务状态和执行恢复操作的命令:
@echo off
REM 检查服务状态
sc query "YourServiceName" | find "STATE" | find "RUNNING"
IF %ERRORLEVEL% NEQ 0 (
REM 如果服务停止,则启动服务
sc start "YourServiceName"
)
然后创建一个计划任务,将该批处理文件安排在固定的时间间隔内运行。
在 Windows 系统中,您可以通过 "服务恢复" 功能来配置服务在崩溃、挂起、泄漏或失败时自动重启。这可以通过图形界面或命令行来完成。
命令行中,您可以使用 sc
命令来设置服务的恢复参数。以下是一个示例命令,用于配置名为 "MyService" 的服务在崩溃后自动重启:
sc failure MyService reset= 0 actions= restart/60000/restart/60000/restart/60000
上述命令中的参数含义如下:
reset= 0
:表示在服务崩溃后不重置计数器。如果设置为其他值(例如 1),则会在每次重启后重置计数器。actions= restart/60000/restart/60000/restart/60000
:表示在发生第一次、第二次和第三次故障后分别执行的操作。在上面的示例中,每次都会尝试在 60 秒后重新启动服务。
您可以根据需要调整重启的时间间隔和重试次数。
请记住,修改服务恢复参数需要管理员权限。确保以管理员身份运行命令提示符或 PowerShell。
SC 命令可以用于创建以下几种类型的服务:
- 自有进程服务(OWN):这是最常见的服务类型,它会启动一个指定的可执行文件作为服务进程,并在后台持续运行。
示例命令:
sc create NewService binPath= "C:\Path\NewService.exe" type= own start= auto
- 共享进程服务(SHARE):这种服务类型与多个相同类型的服务共享同一个进程。可以用于提高资源利用率。
示例命令:
sc create SharedService binPath= "C:\Path\SharedProcess.exe" type= share start= auto
- 内核驱动服务(KERNEL_DRIVER):这种服务类型是在内核级别运行的驱动程序服务,用于提供对硬件或系统资源的底层访问。
示例命令:
sc create DriverService type= kernel start= demand binPath= "C:\Path\Driver.sys"
- 文件系统驱动服务(FILE_SYSTEM_DRIVER):这种服务类型是在内核级别运行的文件系统驱动程序服务,用于提供对文件系统的底层访问。
示例命令:
sc create FileSystemService type= filesys start= boot binPath= "C:\Path\FileSystem.sys"
- 交互式服务(INTERACTIVE_PROCESS):这种服务类型启动的进程可以与桌面用户交互。但是,这种服务类型存在安全性问题,因此在 Windows Vista 及更高版本中不再支持。
示例命令:
sc create InteractiveService binPath= "C:\Path\InteractiveProcess.exe" type= own start= auto interact= yes
- 设备驱动服务(SERVICE_KERNEL_DRIVER):这种服务类型与 KERNEL_DRIVER 类型类似,但它是用于设备驱动程序服务的专用类型。
示例命令:
sc create DeviceDriverService type= service_kernel_driver start= demand binPath= "C:\Path\DeviceDriver.sys"
- 安装服务:要安装一个名为 "MyService" 的服务,其可执行文件路径为 "C:\MyApp\MyService.exe",可以使用以下命令:
sc create MyService binPath= "C:\MyApp\MyService.exe"
- 启动服务:要启动名为 "MyService" 的服务,可以使用以下命令:
sc start MyService
- 停止服务:要停止名为 "MyService" 的服务,可以使用以下命令:
sc stop MyService
- 卸载服务:要卸载名为 "MyService" 的服务,可以使用以下命令:
sc delete MyService
- 查询服务状态:要查询名为 "MyService" 的服务的当前状态,可以使用以下命令:
sc query MyService
- 设置服务参数:要设置名为 "MyService" 的服务的参数,例如服务描述、启动类型、依赖关系等,可以使用以下命令:
sc config MyService start= auto depend= "EventLog/MyOtherService" description= "My custom service"
其中,"start" 参数指定服务的启动类型,"depend" 参数指定服务依赖的其他服务,"description" 参数指定服务的描述信息。
-
修改服务显示名称:
Copy Codesc config MyService DisplayName= "My Service"
-
设置服务启动类型为自动(系统启动时自动启动服务):
Copy Codesc config MyService start= auto
-
设置服务启动类型为手动(需要手动启动服务):
Copy Codesc config MyService start= demand
-
设置服务启动类型为禁用(不允许启动服务):
Copy Codesc config MyService start= disabled
-
设置服务依赖关系(指定其他服务作为该服务的依赖项):
Copy Codesc config MyService depend= "EventLog/MyOtherService"
-
查询服务的可执行文件路径:
Copy Codesc qc MyService
-
查询服务的详细信息(包括配置信息、状态等):
Copy Codesc qdescription MyService
-
查询服务的事件日志配置:
Copy Codesc qfailure MyService
-
暂停服务(如果服务支持暂停操作):
Copy Codesc pause MyService
-
恢复服务(如果服务已被暂停):
Copy Codesc continue MyService
-
查询服务的启动类型和状态:
Copy Codesc qc MyService
-
查询服务的依赖关系:
Copy Codesc enumdepend MyService
-
修改服务的启动类型为自动延迟启动:
Copy Codesc config MyService start= delayed-auto
-
修改服务的二进制路径:
Copy Codesc config MyService binPath= "C:\Path\UpdatedService.exe"
-
修改服务的描述信息:
Copy Codesc description MyService "Updated service description"
-
设置服务的失败操作:
Copy Codesc failure MyService reset= 86400 actions= restart/60000/restart/60000/restart/60000
-
配置服务的故障恢复选项:
Copy Codesc failureflag MyService 3
-
查询服务的安全描述符:
Copy Codesc showsid MyService
-
查询服务的启动类型:
Copy Codesc qc MyService
-
修改服务的启动类型为手动:
Copy Codesc config MyService start= demand
-
修改服务的启动类型为自动(延迟启动):
Copy Codesc config MyService start= delayed-auto
-
启用服务故障恢复功能,设置服务失败时重新启动的次数和时间间隔:
Copy Codesc failure MyService reset= 86400 actions= restart/60000/restart/60000/restart/60000
-
配置服务的故障恢复标志:
Copy Codesc failureflag MyService 3
-
查询服务的安全描述符:
Copy Codesc showsid MyService
-
导出服务配置信息到文件:
Copy Codesc qc MyService > ServiceConfig.txt
-
导入服务配置信息:
Copy Codesc create NewService binPath= "C:\NewService\NewService.exe" type= own start= auto
-
查询服务的状态:
Copy Codesc query MyService
-
启动服务:
Copy Codesc start MyService
-
停止服务:
Copy Codesc stop MyService
-
查询服务的依赖项:
Copy Codesc qc MyService | findstr /C:"DEPEND"
-
删除服务:
Copy Codesc delete MyService
-
查询服务的配置信息:
Copy Codesc qc MyService
-
修改服务的二进制路径:
Copy Codesc config MyService binPath= "C:\Path\UpdatedService.exe"
-
修改服务的显示名称:
Copy Codesc config MyService DisplayName= "Updated Service Name"
instsrv 命令是 Windows 操作系统中的一个命令行工具,用于安装、卸载、配置和管理服务。它内部调用了 Services Control Manager (SCM)API 来实现这些操作。
在 Windows 操作系统中,服务是后台运行的应用程序或进程,它们可以在系统启动时自动启动,并在后台提供某种功能或服务。例如,网络共享服务、打印机服务、Web 服务器服务等。
instsrv 命令通过创建或删除服务注册表项、拷贝服务二进制文件并设置服务参数等方式来实现服务的安装和卸载。在服务安装后,instsrv 命令还可以使用 ChangeServiceConfig 或 ChangeServiceConfig2 函数来更改服务配置信息,例如服务显示名称、服务描述、服务启动类型、服务依赖性、服务登录用户等等。
instsrv 命令的运作机制如下:
-
instsrv 命令首先检查用户是否有足够的权限来执行服务安装、卸载和配置操作。
-
如果用户具有足够的权限,则 instsrv 命令将在注册表中创建一个新的服务注册表项,该项包含服务的相关信息,例如服务名称、服务文件路径、服务描述等等。
-
然后,instsrv 命令会将服务二进制文件复制到系统目录中,并设置服务参数,例如服务依赖性、服务启动类型、服务登录用户等等。
-
最后,instsrv 命令将向 SCM 发送消息,告诉它有新的服务可用。SCM 会检测到这个消息,并根据服务的配置信息来启动或停止服务。
instsrv 命令是一个方便实用的工具,可以帮助用户快速、简便地安装、卸载和管理服务。
instsrv 是一个用于在 Windows NT 系统上安装和移除系统服务的命令。
使用方式如下:
INSTSRV <service name> (<exe location> | REMOVE)
[-a <Account Name>] [-p <Account Password>]
安装服务示例:
INSTSRV MyService C:\MyDir\DiskService.Exe
-OR-
INSTSRV MyService C:\mailsrv\mailsrv.exe -a MYDOMAIN\joebob -p foo
移除服务示例:
INSTSRV MyService REMOVE
请注意,<service name> 是要安装或移除的服务的名称,可以根据您的实际情况进行更改。<exe location> 是服务可执行文件的位置。-a <Account Name> 和 -p <Account Password> 是可选参数,用于指定服务运行的账户和密码。
这个命令可以通过命令行或批处理脚本运行,用于管理系统服务的安装和移除。
安装服务:
instsrv MyService "C:\Path\to\MyService.exe"
这将把名为 "MyService" 的服务安装到系统中,服务的可执行文件位于 "C:\Path\to\MyService.exe"。
移除服务:
instsrv MyService REMOVE
这将从系统中移除名为 "MyService" 的服务。
指定服务账户:
instsrv MyService "C:\Path\to\MyService.exe" -a "MyAccount" -p "MyPassword"
这将安装名为 "MyService" 的服务,并将其运行账户设置为 "MyAccount",密码为 "MyPassword"。
设置服务依赖关系:
instsrv MyService DEPEND=Service1/Service2
这将设置名为 "MyService" 的服务依赖于 "Service1" 和 "Service2",即在这两个服务启动后才会启动 "MyService"。
设置服务描述:
instsrv MyService "C:\Path\to\MyService.exe" -d "This is a description of MyService"
这将安装名为 "MyService" 的服务,并设置其描述为 "This is a description of MyService"。
自定义服务启动类型:
instsrv MyService "C:\Path\to\MyService.exe" -t auto
这将安装名为 "MyService" 的服务,并将其启动类型设置为自动启动。
查询服务状态:
instsrv MyService QUERY
这将查询名为 "MyService" 的服务的当前状态,包括是否正在运行等信息。
输出日志信息:
instsrv MyService "C:\Path\to\MyService.exe" -e "C:\Path\to\log\file.log"
这将安装名为 "MyService" 的服务,并将日志输出到指定的文件 "C:\Path\to\log\file.log" 中。
设置服务启动参数:
instsrv MyService "C:\Path\to\MyService.exe" -param "param1 param2"
这将安装名为 "MyService" 的服务,并设置其启动参数为 "param1 param2"。
设置服务依赖组:
instsrv MyService GROUP=Group1/Group2
这将将名为 "MyService" 的服务添加到 "Group1" 和 "Group2" 这两个服务依赖组中。
设置服务对象名称:
instsrv MyService "C:\Path\to\MyService.exe" -obj "MyAccount" -pwd "MyPassword"
这将安装名为 "MyService" 的服务,并将其运行账户设置为 "MyAccount",密码为 "MyPassword"。
设置服务故障恢复选项:
instsrv MyService FAILURE=actions/restart/60000/restart/120000/restart/180000
这将设置名为 "MyService" 的服务在故障发生时,尝试重启操作三次,每次间隔分别为 60 秒、120 秒和 180 秒。
设置服务显示名称:
instsrv MyService "C:\Path\to\MyService.exe" -n "My Display Name"
这将安装名为 "MyService" 的服务,并设置其显示名称为 "My Display Name"。
设置服务依赖组的加载顺序:
instsrv MyService GROUPORDER=Group1/Group2
这将设置名为 "MyService" 的服务在加载时按照 "Group1" 和 "Group2" 的顺序加载依赖组。
设置服务启动延迟:
instsrv MyService "C:\Path\to\MyService.exe" -delay 30000
这将安装名为 "MyService" 的服务,并设置其启动延迟为 30 秒。
设置服务的交互式桌面模式:
instsrv MyService "C:\Path\to\MyService.exe" -interactive
这将安装名为 "MyService" 的服务,并将其配置为在交互式桌面模式下运行。
设置服务的描述:
instsrv MyService "C:\Path\to\MyService.exe" -d "My Service Description"
这将安装名为 "MyService" 的服务,并设置其描述为 "My Service Description"。
设置服务的优先级:
instsrv MyService "C:\Path\to\MyService.exe" -p normal/high
这将安装名为 "MyService" 的服务,并将其优先级设置为普通或高。
设置服务的启动失败操作:
instsrv MyService FAILURE=actions/restart/60000/restart/120000/reset/180000
这将设置名为 "MyService" 的服务在启动失败时,尝试重启操作两次,每次间隔分别为 60 秒和 120 秒,并在第三次失败后重置计数器。
设置服务的标志:
instsrv MyService "C:\Path\to\MyService.exe" -flags interactiveprocess
这将安装名为 "MyService" 的服务,并设置其标志为 "interactiveprocess",表示该服务是一个交互式进程。
设置服务的起始类型:
instsrv MyService "C:\Path\to\MyService.exe" -start auto/demand/disabled
这将安装名为 "MyService" 的服务,并设置其起始类型为自动(auto)、手动(demand)或禁用(disabled)。
设置服务的错误控制参数:
instsrv MyService "C:\Path\to\MyService.exe" -e normal/severe/critical/ignore
这将安装名为 "MyService" 的服务,并设置其错误控制参数为普通(normal)、严重(severe)、关键(critical)或忽略(ignore)。
设置服务的可恢复选项:
instsrv MyService FAILURE=actions/restart/60000/restart/120000/run/180000
这将设置名为 "MyService" 的服务在故障发生时,尝试重启操作两次,每次间隔分别为 60 秒和 120 秒,并在第三次失败后运行指定命令。
设置服务的延迟自动启动:
instsrv MyService "C:\Path\to\MyService.exe" -delayed
这将安装名为 "MyService" 的服务,并设置其为延迟自动启动。
设置服务的安全描述符:
instsrv MyService "C:\Path\to\MyService.exe" -s "D:(A;OICI;GR;;;AU)(A;OICI;GA;;;BA)"
这将安装名为 "MyService" 的服务,并设置其安全描述符为指定的字符串。安全描述符用于定义服务的访问权限和安全设置。
设置服务的日志文件:
instsrv MyService "C:\Path\to\MyService.exe" -logpath "C:\Path\to\LogFolder"
这将安装名为 "MyService" 的服务,并设置其日志文件路径为指定的文件夹路径。
设置服务的环境变量:
instsrv MyService "C:\Path\to\MyService.exe" -env "VAR1=Value1;VAR2=Value2"
这将安装名为 "MyService" 的服务,并设置其环境变量为指定的键值对。
设置服务的启动用户名和密码:
instsrv MyService "C:\Path\to\MyService.exe" -username "MyUser" -password "MyPassword"
这将安装名为 "MyService" 的服务,并设置其启动用户名和密码为指定的值。
设置服务的交互式属性:
instsrv MyService "C:\Path\to\MyService.exe" -interactive
这将安装名为 "MyService" 的服务,并设置其为交互式服务,允许服务与桌面交互。
设置服务的描述信息:
instsrv MyService "C:\Path\to\MyService.exe" -description "This is a sample service."
这将安装名为 "MyService" 的服务,并设置其描述信息为指定的文本。
设置服务的依赖性:
instsrv MyService "C:\Path\to\MyService.exe" -depend Service1/Service2
这将安装名为 "MyService" 的服务,并设置其依赖于其他服务(Service1 和 Service2)。
设置服务的工作目录:
instsrv MyService "C:\Path\to\MyService.exe" -dir "C:\Path\to\WorkingDirectory"
这将安装名为 "MyService" 的服务,并设置其工作目录为指定的路径。