С# управление выключением Windows

Пожалуйста, прочитайте - это не дубликат.

У меня есть служба Windows, которая работает под учетной записью LocalSystem. Мне нужно восстановить определенные файлы перед выключением. Я могу перехватить действие «Завершение работы», после чего я инициирую процесс восстановления, но отключение происходит до того, как я успеваю его завершить. Я включил привилегии выключения, добавил вызовы AbortShutdown (Win32) и несколько других опций (например, выключение /a), но они не работают. Я полагаю, это потому, что выключение или перезагрузка уже были инициированы, и я читал, что эти функции останавливают выключение только тогда, когда оно запланировано.

Моя цель - перехватить завершение работы, прервать его, выполнить мои задачи и затем завершить работу. Мне просто нужно больше времени, и количество времени зависит от количества и размера файлов, которые мне нужно восстановить.

Я открыт для любых предложений и ценю ваше время и внимание. Спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваша цель несостоятельна. В Windows пользователь может контролировать процесс выключения. Если пользователь хочет выключить машину, ваше программное обеспечение не может противоречить намерениям пользователя.

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

Файлы, о которых вы говорите, которые вы должны восстановить перед выключением, должны быть «восстановлены» (трудно сказать, что именно вы имеете в виду здесь), как только какие-либо операции над ними будут завершены. Без дальнейших подробностей трудно обсуждать конкретные подходы.

Это больше похоже на то, что можно сделать с пакетными файлами Windows.

Другие вопросы по теме