Как предотвратить неосторожное завершение работы приложений, запущенных в моем пакетном файле - PullRequest
1 голос
/ 03 апреля 2012

Я занимаюсь разработкой алгоритма резервного копирования, аналогичного Time Machine (программное обеспечение «непрерывного резервного копирования»). Я успешно в этом через пакетный файл (командная строка). Он работает почти каждые 3 минуты в течение менее минуты каждый «раунд». Пакетный файл запускается в окне командной строки (которое я могу скрыть, если мой код уже работает нормально).

Единственная проблема, с которой я сталкиваюсь, заключается в том, что при выключении мне приходится ждать, пока пакетный файл завершит свой «раунд», прежде чем я смогу нажать кнопку выключения (или, в противном случае, нажатие выключения в любое другое время приведет к ошибкам - до Команды будут прерваны посреди чего-либо, таким образом, алгоритм разрушен). Я хочу сделать это автоматически, то есть я могу нажать кнопку выключения, тогда мой пакетный файл должен ждать завершения «раунда», команды dos не должны прерываться, тогда только после «раунда» он должен разрешить машину выключить.

Программы DOS, которые я использую и которые беззастенчиво завершаются: ln (найден в Интернете - используется для жесткой ссылки на файлы), копировать, перемещать (плюс такие вещи, как циклы, команда dir и т. Д. Разрушены).

Как я могу предотвратить некорректное завершение работы этих приложений в моих пакетных файлах? (и любое другое приложение, которое я запускаю?)

Я пытался запустить его от имени другого пользователя, но все равно приложения закрываются при завершении работы. Я думал о запуске команды в Visual Basic при использовании кода «предотвращение завершения работы» в VB, но только приложение VB не завершается, пакетный файл, который я запускал внутри приложения VB, а также приложение, которое он запускает, завершаются точно так же.

Помощь

ccxzy

1 Ответ

0 голосов
/ 26 декабря 2012

Это ни в коем случае не чисто, но я думаю, что это единственный способ сделать это.

Внешний пакетный файл:

    @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

Это будет пытаться остановить отключение каждые две секунды, в случае успеха оно отключится после.

...