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 错误或内部服务错误。如果问题仍然存在,请联系您的系统管理员。
注意:在我的情况下,我不能使用 Always up 或 window scheduler。
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:这根本行不通。也许如果你提出另一个关于你实际上想做什么的问题?听起来您将服务视为解决方案,但尚未描述问题。
| 归档时间: |
|
| 查看次数: |
13570 次 |
| 最近记录: |