我正在尝试整理一个批处理文件,该文件将设置 robocopy 任务作为响应用户输入的服务。基本思路是用户输入 MyRobocopyBatchFile.bat sourceFolder destinationMachine,然后从此文件夹的内容将与目标计算机上的已知文件夹进行镜像。服务将设置为自动启动,因此它将在启动时运行。为此,我从以下位置获取了队列:这个问题
目标环境是 WindowsServer 2008 R2
我这样做的目的是
set destination=\\%2\RunSheets
set source=%~dp0%1
echo Setting source to %source%
echo Setting destination to %destination%
set serviceName=RunSheetCopy%2
sc create %serviceName% binPath= "c:\Windows\System32\robocopy.exe %source% %destination% /MIR /MON:1 /v /log:C:\Logs\RoboCopy\%serviceName%.log /LEV:1" start= auto DisplayName= %serviceName%
sc start %serviceName%
用户输入的内容如下:
MyRobocopyBatchFile.bat .\RunSheets 10.20.30.40
我面临的问题是,当批处理文件启动服务时,它会给我一个错误消息。使用 NetStart 或通过服务窗口启动时也会出现相同的错误消息。错误消息是:
[SC] StartService FAILED 1053:
The service did not respond to the start or control request in a
timely fashion.
尽管出现错误消息,robocopy 正在同步目录,但它不会在监控模式下继续运行。
如果您能提供关于如何让 robocopy 作为服务运行的任何帮助,我们将非常感激。
NB:产品经理对服务的想法非常热衷。
更新:因为没有办法以一种让 PM 满意的机制来做到这一点(SrvAny,作为遗留不是一个选择),我最终决定为 RoboCopy 拼凑一个服务包装器,这不是我想要的解决方案,但它可以完成工作。
答案1
几年前我就能够设置这样的东西……但不记得怎么做了!所以我重新启动了我的旧虚拟机来检查。
我已经使用了服务端附带的实用程序Windows 2003 资源工具包。
此实用程序在最新版本的 Windows 上不受支持,但可在 Windows 2008 R2 上使用。
从上一个链接中,请注意这一要点:
但请注意,SC 不能替代 SRVANY!SC 将帮助您创建/安装服务,但不允许您以 Windows 服务(如 srvany.exe)的形式运行常规的非服务可执行文件。
这就是您收到错误消息的原因。该Robocopy
命令在服务启动时执行,但随后崩溃,因为它不是设计为作为 Windows 服务运行的。
下载并安装
rktools.exe
到您的工作站,然后仅将所需的文件复制到srvany.exe
服务器上的某个位置(假设c:\Tools
)。然后为以下项创建 Windows 服务
srvany
:sc create Robocopy-Service binPath= "C:\Tools\srvany.exe" start= auto
打开注册表并转到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Robocopy-Service
创建一个名为
Parameters
在该新键下,创建 3 个新的字符串值:
- 应用程序目录:c:\windows\system32
- 应用程序:c:\windows\system32\robocopy.exe
- 应用程序参数:c:\source c:\dest /MIR /MON:1
最后启动指定的服务Robocopy-Service
,一切都应该正常工作。
现在,从这里开始,您仍然可以在批处理文件中自动执行操作,但您必须使用注册表编辑器(或 regedit.exe)来操作注册表设置。
我还在我的书签中找到了对我有帮助的原始链接: https://plus.google.com/112485889729268615636/posts/bH8rSDo5ocC
答案2
旧帖子,新答案 49.95 美元,应该可以。致力于将 Onedrive 业务作为一项服务来运营。 http://www.coretechnologies.com/products/AlwaysUp/
这里是另一个可以自行尝试的候选方案(免费): http://www.rozanski.org.uk/services
SVC.EXE 概要。SVC.EXE 是一个简单的 Windows NT 命令行程序,用于管理 NT 服务。可以列出服务,并显示、安装、修改或删除单个服务。它包括定义服务依赖关系的工具。该程序会提示从 stdin 输入所有需要的信息。对于大多数提示,输入 ? 将显示帮助消息。
警告 - 建议您在运行此程序之前备份您的注册表。(虽然我在使用它时从未遇到任何问题。)
请注意,SVC.EXE 与同名的 Madfinder 间谍软件程序无关。单击此处获取更多信息。
启动服务端
摘要。SRVSTART.EXE 是一个 Win32 可执行文件和 DLL,它允许您像运行 Windows NT 服务一样运行命令。它还具有一些功能来增强普通控制台命令的运行(提示输入参数等)。DLL 可以单独用于构建服务,而无需编写任何服务管理代码。
SRVSTART.EXE 以两种模式之一运行。
It can be used to run an ordinary command (executable program batch file). In this command mode, SRVSTART.EXE can prompt the user for the values of command-line parameters such as passwords.
It can be used to run an executable program in the context of a Windows NT service (service mode). SRVSTART.EXE will itself handle all of the interactions with the NT Service Control Manager (SCM). It is not necessary for the program to include any service management code.
SrvStart 奖项
SRVSTART.EXE 最初被 ZDNet Downloads 评为五星级编辑精选。不幸的是,由于 Ziff-Davis 决定向软件开发人员(甚至是像我这样的免费软件开发人员)收取列出费用,我的软件不再出现在他们的网站上。