Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何防止在批处理文件中运行的应用程序意外关闭_Batch File_Cmd_Dos_Shutdown - Fatal编程技术网

Batch file 如何防止在批处理文件中运行的应用程序意外关闭

Batch file 如何防止在批处理文件中运行的应用程序意外关闭,batch-file,cmd,dos,shutdown,Batch File,Cmd,Dos,Shutdown,我正在开发一种类似于Time Machine连续备份软件的备份算法。我通过batchfile命令提示符成功地完成了这项工作。它几乎每3分钟运行一次,每轮不到一分钟。batchfile在命令提示符窗口中运行,如果代码运行良好,我可以隐藏该窗口 我遇到的唯一问题是,当关闭时,我必须等待batchfile完成它的循环,然后才能单击关闭按钮,否则,在任何其他时间按关闭按钮都会把事情搞砸dos命令会在任何事情中间终止,从而破坏算法。我想自动完成,也就是说,我可以点击关机按钮,然后我的批处理文件应该等待回合

我正在开发一种类似于Time Machine连续备份软件的备份算法。我通过batchfile命令提示符成功地完成了这项工作。它几乎每3分钟运行一次,每轮不到一分钟。batchfile在命令提示符窗口中运行,如果代码运行良好,我可以隐藏该窗口

我遇到的唯一问题是,当关闭时,我必须等待batchfile完成它的循环,然后才能单击关闭按钮,否则,在任何其他时间按关闭按钮都会把事情搞砸dos命令会在任何事情中间终止,从而破坏算法。我想自动完成,也就是说,我可以点击关机按钮,然后我的批处理文件应该等待回合结束,dos命令不应该终止,然后只有在回合结束后才允许机器关机

我使用的dos程序被错误地终止了:在web上找到的用于硬链接文件、复制、移动以及for循环、dir命令等的程序都被破坏了

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

我尝试以不同的用户身份运行它,但同样,应用程序在关机时终止。我想在VB中使用阻止关机代码的同时在Visual Basic中运行该命令,但只有VB应用程序没有终止,我在VB应用程序中运行的批处理文件以及它运行的应用程序都被终止

帮助


这一点也不干净,但这是我能想到的唯一办法

外部批处理文件:

    @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
原始批处理文件:

    @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

这将尝试每两秒钟停止一次关闭,如果成功,它将在之后关闭。

我知道在Linux中,有一种方法可以捕获kill,ctrl+C。。。因此,脚本不会对其作出反应,您可以编写一个程序,在陷阱被激活时被激活。也许值得一看?阻止关闭VB代码实际上做了什么?它是取消关闭过程还是仅仅阻止VB应用程序本身被终止,从而仅仅阻止整个关闭过程?我想知道是否可以更改它,以便在必要时停止启动的关闭,等待回合结束,然后自动关闭系统。@AndriyM它可以防止VB应用程序被终止。我现在正在考虑。也许,问题是我应该尽快取消关机过程,以免它杀死一些正在运行的应用程序,从而破坏我的算法。我认为关机前总会有一个延迟,因此,我的算法中总会有失败的风险。啊,是的,这是有道理的,我担心会有这样的风险。而且,考虑到这种方法既不能保证也不能预测预期预期的效果,我想我们又回到了原点。