将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 服务执行时未运行