崩溃/错误时重新启动批处理文件

时间:2013-07-10 16:44:05

标签: file batch-file

我有一个遇到多个错误的批处理文件。这些错误需要强制关闭命令提示符。这导致我必须再次打开文件来解决问题。

由于此应用程序的性质,它需要一直运行。

我正在寻找一种方法来自动化文件,以便在遇到错误时重新启动。我可以用这个命令吗?

请您详细说明以及为什么命令能够完成这样的决议?

3 个答案:

答案 0 :(得分:4)

<强>更新

我建议您实现目标,将批次转换为服务。 (Documentation here)通过将批次转换为服务不再受用户登录,权限问题的限制,它将作为系统帐户。这本身就可以缓解这个过程的很多愤怒。

完成后,您可以编写文件,以确保您的服务确实正在运行。您当前的问题是,它不会自动重新启动。好吧,服务总是运行 - 即使它有错误,它仍然会尝试运行。

这意味着,除非它有致命异常,否则您的服务应始终有效 - 但为了确定您可以创建一个批次,以确保您的服务 正在运行

一个例子:

 :START
timeout 3600
for /F "tokens=3 delims: " %%H in ('sc query "MyServiceName" ^| findstr "
    if /I "%%H" NEQ "RUNNING" (

    NET START "MyServiceName"
    REM Service has Started...
    )
)
GOTO START

因此理论上每隔3,600秒就会测试你的服务是否正在运行,如果不是,它会为你启动服务

重要: 这是解决问题的正确方法,而不是绕过它。但是,正如我所指出的,仍应恳求Exception Handling以确保您的应用程序不会落入不可用状态。这仍然不是最佳方式,因为它应该恳求Exception HandlingVerification来测试它的状态。

正如我之前提到的,您有很多方法可以解决您的问题。但是,您在线性心态中的想法。这意味着:

  • 执行命令,保证目标。
  • 如果我这样做,就会发生这种情况。

基本上基于我看到的最小例子,看起来你已经创建了一个无限循环来连续执行命令。我的问题是:当你的循环出错时,它怎么能继续运行?

你已经说过它发生在随机区域 - 没有什么是随机的,那些更可能是需要进行一些验证/测试的区域,以确保它保持在适当的状态。 您识别潜在问题的速度越快,您的程序就越有效,无错误。

希望有帮助 -


您的批量应用究竟做了什么?

我问的原因是因为您可以通过 Windows任务计划程序解决问题,它允许您根据您的自动启动和自动打开特定应用程序配置一些参数指定的标准。 这会是理想的吗?它是否会真正实现您的需求自动化 - 更多可能不会。

如上所述GolezTrol,您的错误原因将是解决您的问题的更重要方面。根据你的评论

  

说实话,错误每次都不同。

这可能表示批处理脚本不符合测试,而是假设成功完成。没有任何下划线信息,例如:

  • 功能
  • 代码示例
  • 发生错误的地方,以及执​​行什么任务。

让你指向正确的方向相对困难。我要考虑的一件事是 IF 。这是一项基本的基本任务,但非常重要 -

if(Directory.Exists(dirName))
{
      // Do This
}
else
{
     // Do This
}

我发现 C#大纲是一种更容易理解 IF 目的的方法。您实际上可以在批处理中实现类似的功能。你会这样做:

if exist { insert file name } (
    rem file exists
) else (
    rem file doesn't exists
)

或者你可以这样做:

if exists c:\myFile.bat notepad c:\myFile.bat

如果存在C:\myFile.bat,请打开记事本。这是一个重要的原因是因为如果变量不存在,那么它就不会受到影响。这允许您的应用程序基本上以非常原始的方式做出决策。

你有很大的灵活性 - 关于这个主题有很多例子,因为批量编程已经存在了很长时间。另一种选择是最终转移到 Powershell 。它可以访问 Windows管理界面(WMI)

希望这可以指出你正确的方向,没有更多的信息,我们的答案可能没什么帮助。


答案 1 :(得分:1)

我相信,最简单的方法是使用GOTO语句再创建一个 .bat 文件:

@echo off
:startover
echo (%time%) App started.
call "c:\app.bat"
echo (%time%) WARNING: App closed or crashed, restarting.
goto startover

答案 2 :(得分:0)

这可能会解决您的问题:

http://nssm.cc/usage

它的基本功能是将一些bat文件添加到nssm并使其成为一项服务。

在“退出行动”部分,它说:

要配置应用程序退出时nssm应采取的操作,请编辑密钥 HKLM \ System \ CurrentControlSet \ Services \ servicename \ Parameters \ AppExit 的默认值。如果nssm运行时注册表中不存在该密钥,则会创建该密钥并将值设置为重新启动