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

mik*_*iki 5 services batch windows-services batch-file windows-10

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

这是我的script.bat文件。

sc create myService binpath= C:\Users\Admin\Desktop\test.bat start= auto 
Run Code Online (Sandbox Code Playgroud)

这是我的test.bat文件。

echo "Welcome to Wizard"
Run Code Online (Sandbox Code Playgroud)

问题陈述

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

我收到以下错误。

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

这就是我使用 nssm 的原因。

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

.\nssm install myService,出现 I 对话框。我给它我的脚本文件的路径,然后单击安装服务。

服务安装成功后。我转到控制面板 -> 服务 -> 单击针对myService 的启动,但它被暂停并出现以下对话框

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

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

注意:在我的情况下,我不能使用 Always up 或 window scheduler。

and*_*dyb 5

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

echo Hello World
pause
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


小智 2

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

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

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

TL;DR:这根本行不通。也许如果你提出另一个关于你实际上想做什么的问题?听起来您将服务视为解决方案,但尚未描述问题。