Вопрос или проблема
Краткая версия: После “крупных” обновлений Windows определенные файлы становятся недоступными для моих Java-приложений, работающих как служба Windows под учетной записью без привилегий. Мне приходится устанавливать сеанс рабочего стола, прежде чем система вернется к “полностью нормальной работе”, то есть предоставит все необходимые файлы моему приложению, даже когда оно работает как служба. Как из этого выбраться?
Полная версия: Я сопровождаю Java-приложение (предоставляющее API через HTTP), которое в производственной среде работает на устройстве с Windows 11 как служба Windows (используя Apache Commons Daemon procrun
). Это устройство настроено на обновления без присмотра и большую часть времени работает без активных сеансов (единственный раз, когда устанавливается сеанс рабочего стола, это когда я провожу обслуживание). Мое приложение работает под специальной учетной записью без привилегий и настроено на автоматический запуск. Все файлы настроек находятся в домашней директории этой учетной записи.
Используемые параметры procrun
следующие (заданы как переменные среды из пакетного скрипта, запускаемого установщиком перед вызовом prunsrv.exe //IS//myservice
):
PR_SERVICEUSER=myappservice
PR_SERVICEPASSWORD=...
PR_STARTUP=auto
PR_STARTMODE=jvm
PR_STARTCLASS=com.myapp.MyApp
PR_STARTMETHOD=procrunStart
Недавно это устройство обновилось до Windows 11 24H2 и перезагрузилось. После перезагрузки служба приложения не смогла запуститься. Изучив журналы, я обнаружил, что приложение не смогло увидеть/прочитать файлы конфигурации и поэтому создало пустые с нуля, что, в свою очередь, привело к тому, что соединение с PostgreSQL-базой данных, работающей на том же устройстве, не могло быть установлено, поскольку пользователь и пароль были не заданы.
К удивлению, PostgreSQL удалось запуститься нормально (предполагаю, что предоставляемый EnterpriseDB инсталлятор PostgreSQL для Windows настраивает его как службу, работающую от SYSTEM
). Еще более удивительно то, что все файлы конфигурации все еще присутствовали, хотя, кажется, Windows переместила их до того, как мое приложение записало новые экземпляры (то есть database.properties
был пустым вариантом, записанным сразу после обновления, а database (1).properties
был оригинальным файлом, перемещенным Windows). Все файлы с ...(1)
имели свои оригинальные временные метки “последнего изменения”.
Я делаю вывод из поведения устройства, что после крупного “функционального” обновления (как 24H2) необходимо установить хотя бы один сеанс рабочего стола (чтобы дать Windows завершить свою “настройку всего для вас”), прежде чем службы, работающие от учетных записей без привилегий, смогут функционировать правильно.
Это уже случалось раньше, полагаю, с Windows 11 23H2. Однако, я хочу полностью избежать таких проблем: устройство должно иметь возможность выполнять обновления без присмотра, и я не хочу следить за обновлениями Windows для крупных обновлений. Также я не хочу вручную заходить в систему, так как не имею “простого” доступа к производственной среде. Поэтому мне хотелось бы получить ответ на следующие вопросы:
- Почему Windows “скрывает” дерево файловой системы в этом конкретном системном состоянии?
- Хотя я понимаю, что Windows 11 не является серверной ОС, я не могу решать, какая ОС будет установлена на машине, поэтому вынужден пользоваться Windows 11. Есть ли хоть малейшая возможность смягчить эту проблему (например, обеспечив возможность корректного запуска без присмотра после крупного обновления Windows), желательно внеся изменения в конфигурацию службы
procrun
или само Java-приложение? - Я готов принять ответ “нет” вместе с небольшим объяснением, что происходит с этой файловой системой. Однако, если ответ “да”, то как я мог бы обойти эту проблему?
Отказ от ответственности: Ранее я публиковал этот вопрос на ServerFault, где он был закрыт как не по теме из-за “неподдерживаемого окружения”. Поскольку я не могу изменить это окружение, я был бы благодарен за любое понимание происходящего и за возможные обходные пути (кроме совета “используйте Windows Server”, который я не могу выполнить).
Не углубляясь в детали приложений и окружения ПК, обратите внимание на многочисленные проблемы с обновлением Microsoft Windows 24H2. Например, ZDNET упоминает множество из них, но особенно techradar и Windows Latest обсуждают как он вредит Проводнику… и, возможно, доступу к файловой системе.
“В наших тестах, когда мы обновили нашу установку Windows 11 24H2 до KB5051987, наша камера HP Spectre перестала работать. В дополнение, это обновление ломает Проводник.”
Возможно, вашу проблему можно решить, откатившись от 24H2, если это в пределах временного окна, позволяющего легко отказаться от обновления. Однако, ожидайте, что пока машина подключена к интернету (что, как кажется, вероятно, из-за того, что она является HTTP-сервером), MS вынудит переустановку в конечном итоге.
К сожалению, это не совсем ответ, но указывает на возможную причину проблемы.
Ответ или решение
Согласно предоставленной информации, проблема связана с Java-приложением, которое запускается как Windows-служба на Windows 11 и сталкивается с трудностями после автоматического обновления операционной системы. После крупных обновлений Windows приложение не может видеть определенные файлы, что ведет к его некорректной работе. Попробуем разобраться в возможных причинах и предложить варианты решения этой проблемы.
Теория (T)
Проблемы, возникающие после обновлений Windows, могут быть связаны с несколькими факторами:
-
Метки файла и контроль доступа: Windows может изменять права доступа на определенные файлы или каталоги при больших обновлениях, особенно если они расположены в системных областях. Это может привести к ситуации, когда служба, запущенная от имени непривилегированной учетной записи, не может получить доступ к этим файлам.
-
Сессии пользователя и подготовка системы: Как вы упомянули, после крупных обновлений Windows может требовать открытия рабочей сессии, чтобы завершить процесс подготовки системы (обычно это связано с настройками профиля пользователя и инициализацией окружения).
-
Подмена и дублирование файлов: Windows имеет механизм новой установки версий файлов, который особо заметен в случае конфликтов. Это может привести к созданию дубликатов файлов с суффиксом, как, например,
(1)
. -
Ошибки и баги в обновлениях: Патчи и обновления, такие как Windows 11 24H2, могут содержать баги, приводящие к проблемам с файловой системой. Это могло наблюдаться и в вашей системе, особенно если другие пользователи сообщают о похожих проблемах.
Пример (E)
Как было отмечено в ряде технических публикаций, таких как ZDNet и TechRadar, обновление Windows 11 24H2 сопровождалось рядом проблем, включая сбои в работе Проводника и доступе к файловой системе. Многие пользователи отмечали, что после установки этого обновления их системы функционировали некорректно, что говорит о наличии критических ошибок в самом обновлении.
Применение (A)
Для решения этой проблемы рекомендуется рассмотреть следующие шаги:
-
Проверка и восстановление прав доступа: Убедитесь, что Java-приложение и профили пользователя, от имени которого оно запускается, имеют необходимые права доступа к файлам и каталогам. Также можно запустить скрипты для массовой проверки и настройки прав через PowerShell.
-
Настройка запуска служб с более высокой привилегией: Рассмотрите возможность запуска службы с учетной записью, обладающей большими привилегиями, такими как локальный администратор, чтобы исключить проблемы с доступом к файлам. Конечно, это следует делать с осторожностью, чтобы не ставить под угрозу безопасность системы.
-
Обработка сценариев обновления: Разработайте и внедрите механизм проверки состояния системы после обновлений. Например, использующиеся инструменты для управления ядром и конфигурацией, такие как Ansible или Puppet, могут автоматически фиксировать измененные права доступа или подмены файлов и откатывать их.
-
Временный откат обновления: Если проблема критическая и не решается быстро, можно временно откатить обновление Windows до его исправления Microsoft. Однако нужно учитывать, что это временная мера, так как обновление в конечном итоге снова будет установлено.
-
Мониторинг исправлений: Включите мониторинг и оповещения о новых обновлениях и исправлениях системы от Microsoft. Это поможет быть в курсе выхода возможных исправлений и обновлений багов, связанных с вашей проблемой.
Понимание вышеописанных аспектов и систематический подход к проблеме могут помочь вам минимизировать сбои в работе Java-приложения после автоматических обновлений Windows.