无法使用 NSSM 在 Windows 10 中启动服务

无法使用 NSSM 在 Windows 10 中启动服务

我已经创建了一个小脚本文件来测试。

这是我的脚本文件。

sc create myService binpath= C:\Users\Admin\Desktop\test.bat start= auto 

这是我的测试脚本文件。

echo "Welcome to Wizard"

问题陈述

我无法从启动服务控制面板服務部分。

我收到以下错误。

[SC] StartService FAILED 1053:服务未及时响应启动或控制请求。

这就是我使用 nssm 的原因。

现在发生的事情是,当我在 powershell 上运行以下命令时

.\nssm 安装我的服务,出现对话框。我给它我的脚本文件的路径并点击安装服务。

成功安装服务后。我进入控制面板 -> 服务 -> 单击开始我的服务但它会暂停并出现以下对话框

Windows 无法在本地计算机上启动 myService 服务。该服务未返回错误。这可能是 Windows 错误或内部服务错误。如果问题仍然存在,请联系您的系统管理员。

  1. 我怎样才能解决这个问题?
  2. 有没有其他方法可以做到这一点,而无需执行手动步骤并且不使用第三方工具。
  3. 我在 Windows 10 上完成所有这些操作。我需要任何服务器来执行此任务吗?

注意:就我而言,我不能使用“Always up”或“窗口调度程序”。

答案1

NSSM 行为是由脚本几乎立即终止引起的。尝试以下脚本:

echo Hello World
pause

这应该允许服务启动,但您不一定会看到控制台窗口。即使您勾选“允许服务与桌面交互”,它也不会与您的桌面交互!

使用 SysInternals Process Explorer,您将能够看到 NSSM 服务与正在执行脚本的 CMD 子进程一起运行。

Windows 实现“会话零隔离”作为一项安全功能,这从本质上阻止了服务与最终用户桌面的交互。

就解决方案而言,使用 Visual Studio 可以相当简单地编写 Windows“服务”应用程序。这超出了我的专业领域,但根据我熟悉的 Windows 应用程序,您通常会运行一个用户模式应用程序来提供桌面交互。用户模式应用程序可以与服务应用程序托管的服务进行交互。

答案2

仅供参考,您可以在 nssm 上设置日志记录以帮助追踪问题。日志记录帮助我解决了类似的问题:

nssm set [SERVICE_NAME] AppStdout [APP_PATH_INSTALL]\logs\service.log
nssm set [SERVICE_NAME] AppStderr [APP_PATH_INSTALL]\logs\service-error.log

答案3

Windows 服务是一个可执行程序,它必须支持一些标准事件(例如 OnStart OnStop、OnPause、OnContinue)。.bat 文件不是可执行文件,您永远无法让它真正作为服务运行。

当您运行 bat 文件时,实际运行的程序是 cmd.exe - 但它不支持所需的事件。

您可以编写 Windows 服务(使用 C++ 或 C# 或许多其他语言),然后可以对服务进行编程以在 cmd.exe 中运行 bat 文件。但是,由于服务无法访问屏幕或键盘,因此 bat 文件无法正常工作。

TL;DR:这根本行不通。也许你可以再问一个问题,看看你到底想做什么?听起来你把服务看作是一种解决方案,但你还没有描述问题。

相关内容