Пожалуйста, прочитайте - это не дубликат.
У меня есть служба Windows, которая работает под учетной записью LocalSystem. Мне нужно восстановить определенные файлы перед выключением. Я могу перехватить действие «Завершение работы», после чего я инициирую процесс восстановления, но отключение происходит до того, как я успеваю его завершить. Я включил привилегии выключения, добавил вызовы AbortShutdown (Win32) и несколько других опций (например, выключение /a), но они не работают. Я полагаю, это потому, что выключение или перезагрузка уже были инициированы, и я читал, что эти функции останавливают выключение только тогда, когда оно запланировано.
Моя цель - перехватить завершение работы, прервать его, выполнить мои задачи и затем завершить работу. Мне просто нужно больше времени, и количество времени зависит от количества и размера файлов, которые мне нужно восстановить.
Я открыт для любых предложений и ценю ваше время и внимание. Спасибо!
Ваша цель несостоятельна. В Windows пользователь может контролировать процесс выключения. Если пользователь хочет выключить машину, ваше программное обеспечение не может противоречить намерениям пользователя.
На вас лежит бремя убедиться, что ваше программное обеспечение может справиться с отключением, когда бы оно ни произошло. Обычно это означает, что файловые операции должны быть настолько атомарными, насколько это возможно, или использовать файл «горячего журнала» для восстановления (при следующем запуске системы) в случае, если атомарные операции не могут быть завершены.
Файлы, о которых вы говорите, которые вы должны восстановить перед выключением, должны быть «восстановлены» (трудно сказать, что именно вы имеете в виду здесь), как только какие-либо операции над ними будут завершены. Без дальнейших подробностей трудно обсуждать конкретные подходы.
Это больше похоже на то, что можно сделать с пакетными файлами Windows.