Изменить время Windows с помощью SetLocalTime () без перезагрузки - PullRequest
0 голосов
/ 29 января 2019

Мы настраиваем встроенную систему Windows, которая должна иметь функцию для изменения системной даты и времени.Наша система обычно не выключается, как обычный ПК, вместо этого пользователь отключает питание напрямую.

Проблема возникает, когда мы пытались использовать функцию Win API, такую ​​как SetLocalTime () (с правами администратора)API успешно завершился, когда функция только что выполнилась, но когда пользователь перезапустит компьютер (т.е. отключит питание и снова включит его), настройка даты возвращается к предыдущей настройке даты.Похоже, в кеше ОС установлен параметр, который требует обычного перезапуска для сохранения параметра на диске.

Кто-нибудь знает, как немедленно «очистить кэш данных», не перезагружая ОС?

Спасибоочень много.

1 Ответ

0 голосов
/ 31 января 2019

Есть два обходных пути, которые вы можете проверить, чтобы увидеть, помогает ли это:

  1. После изменения времени Windows вы явно выполняете перезагрузку, чтобы ваши изменения были записаны на диск до того, как пользователь выполнит резку.власть напрямую.Вы можете использовать следующий API для перезагрузки системы:

    ExitWindowsEx(EWX_REBOOT | EWX_FORCE, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_MINOR_UPGRADE | SHTDN_REASON_FLAG_PLANNED)

    Ссылка: " Как завершить работу системы "

  2. Кэширование можно отключить для файла открывается путем передачи FILE_FLAG_NO_BUFFERING в качестве значения для параметра dwFlagsAndAttributes CreateFile .Когда кэширование отключено, все операции чтения и записи получают прямой доступ к физическому диску.Таким образом, вы можете сохранить время в таком файле и прочитать его при перезагрузке системы и установить его заново ( Запуск запланированного задания при загрузке системы ).

...