将bat文件作为windows服务执行

Posted

技术标签:

【中文标题】将bat文件作为windows服务执行【英文标题】:Execute bat file as a windows service 【发布时间】:2022-01-11 09:11:39 【问题描述】:

我有一个想要作为服务执行的 Windows 批处理文件。我找到了像 alwaysRun 这样的应用程序,但我想为此目的使用 Windows 内置应用程序。谁能推荐一下。

我的用例是: - 我有一个批处理文件,它将在每 10 秒后执行一次。所以我创建了一个普通的批处理文件,它调用这个 bat 文件并休眠 10 秒。所以我想将第二个 bat 文件作为服务。这样它就会在 Windows 重新启动时被调用一次。

此文件应作为服务调用。

@echo off
:begin
CALL dummyfile.bat
timeout /t 1
goto begin

请提出建议。

【问题讨论】:

这是不可能的。 @KonstantinL 不,这根本不是不可能的,但这是一个愚蠢的想法。 【参考方案1】:

我不会那样做,没用。您可以从计划任务中运行第一个批处理文件。

如果你想在启动时运行它。

例如,在 Windows 8 上

创建一个将完全隐藏您的批处理文件的 VBS 文件。

hideme.vbs

Set MyScript    = CreateObject("WScript.Shell")
MyScript.Run "C:\wherever\script\is\batch.cmd", 0, False

可以cscript hideme.vbs启动

然后打开开始/运行并输入shell.startup 并按回车键。在此处粘贴 VBS 文件的快捷方式。

这将使VBS文件在每次PC启动时以隐藏模式调用第二个批处理文件。

编辑 为了杀死它,你需要创建另一个批处理文件,你可以运行它来找到在后台运行的 cmd.exe。

在您的原始批处理文件中,在@echo off 之后的最开头创建一个标题

@echo off
title LOOP
:begin
CALL dummyfile.bat
timeout /t 1
goto begin

现在在你的新批处理文件中,我们称它为 killLOOP.cmd 你添加这个:

taskkill /F /FI "WindowTitle eq  LOOP" /T

这将搜索带有 Window 标题 LOOP 的进程,然后将其杀死。当你想关闭它时运行它。 现在在你的

【讨论】:

在计划任务设置中,脚本不能每 1 分钟运行一次。所以我无法尝试,因为我需要每 10 秒运行一次。 @IftekharKhan 然后使用我在答案中提到的方法。 Set MyScript = CreateObject("WScript.Shell") MyScript.Run "C:\Users\Documents\Python Scripts\Data_Extractor_Service.bat", 0, False 这给我一个错误,系统找不到指定的文件。 把vbs文件和你的批处理文件放在同一目录下,然后Set MyScript = CreateObject("WScript.Shell") MyScript.Run "Data_Extractor_Service.bat", 0, False【参考方案2】:

您是否看过名为 sc.exe 的本机 Windows 程序?它允许您将程序作为服务运行。

这里有一些关于它的 Microsoft 文档:https://support.microsoft.com/en-us/help/251192/how-to-create-a-windows-service-by-using-sc-exe

sc [Servername] 命令服务名 [Optionname= Optionvalue...]

特别是,您可以使用Create 命令创建新服务:

创建 创建服务(将其添加到注册表)。

所以最简单的语法应该是这样的:

sc Create myservice binPath=C:\some\path\to\myservice.bat

【讨论】:

以上是关于将bat文件作为windows服务执行的主要内容,如果未能解决你的问题,请参考以下文章

.bat 文件在应用程序作为 Windows 服务执行时未运行

window bat 运行 cmd 命令

怎么把.bat添加成系统服务让开机自动启动

.bat文件如何生成windows服务

Zabbix结合bat脚本与计划任务开启window远程桌面

Window服务安装方式汇总