如何防止在我的批处理文件中运行的应用程序的非正常关闭

时间:2012-04-03 17:32:33

标签: batch-file cmd dos shutdown

我正在开发类似于Time Machine的备份算法(“连续备份”软件)。我通过batchfile(命令提示符)成功完成了这项工作。它几乎每3分钟运行一次,每次“圆形”不到一分钟。批处理文件在命令提示符窗口中运行(如果我的代码已经正常运行,我可以隐藏它。)

我遇到的唯一问题是关闭时,我必须等待批处理文件完成其“循环”才能点击关机按钮(否则,在任何其他时间按下关机会搞砸事情 - dos命令将在任何东西中终止,因此算法被破坏)。我想自动执行,也就是说,我可以单击关机按钮,然后我的批处理文件应该等待“循环”完成,dos命令不应该终止,那么只有在“圆形”之后它应该允许机器关闭。

我使用的非正常终止的dos程序是:ln(在网上找到 - 用于硬链接文件),复制,移动(加上for循环,dir命令等等都会被破坏)。

如何防止在我的批处理文件中非正常关闭这些应用程序? (以及我运行的任何其他应用程序?)

我尝试将其作为不同的用户运行,但同样,应用程序在关闭时终止。我想在VB中使用“防止关机”代码时在Visual Basic中运行命令,但只有VB应用程序没有终止,我在VB应用程序中运行的批处理文件以及它运行的应用程序都被终止了。 / p>

帮助

ccxzy

1 个答案:

答案 0 :(得分:0)

这绝不是干净的,但这是我能想到的唯一方法。

外部批处理文件:

    @ECHO OFF
    :loop
        if exist %temp%\done.flg (
            if exist %temp%\shutdown.flg shutdown -s -f -t 0 && del /Q %temp%\shutdown.flg
            del /Q %temp%\done.flg
            exit
        )
        shutdown -a > NUL 2>&1 && echo shutdown detected > %temp%\shutdown.flg
        ping localhost -n 2 > NUL 2>&1
    goto loop

原始批处理文件:

    start "" "path\to\shutdown\stopper.bat"
    :: back up code here
    echo done > %temp%\done.flg

这会尝试每两秒停止一次关机,如果成功则会在之后关闭。