v0.3.7.12
0.3.7.12
Исправление по PR #227 (Linux): обновление с повышением прав через pkexec больше не закрывает приложение до ответа PolicyKit — окно остаётся отзывчивым, а при отказе или недоступности прав приложение продолжает работать и показывает запасной диалог со ссылкой на страницу выпуска.
Исправлено
-
Linux: приложение больше не закрывается до ответа на запрос PolicyKit (PR #227, симптом из #153): раньше
LaunchPrivilegedUpdaterвозвращалtrueсразу послеProcess.Start, иShutdownNow()вызывался, пока пользователь ещё не ввёл пароль — приложение молча закрывалось, ничего не обновив. Теперь сценарий-помощник, получив права, первым делом создаёт файл-маркер, а приложение ждёт либо этот маркер, либо ранний выходpkexec(отказ PolicyKit даёт код 126, сбой запуска 127), с таймаутом 3 минуты. При отказе или недоступностиpkexecприложение остаётся работать и показывает запасной диалог с кликабельной ссылкой на страницу выпуска. Реализовано вServices/UpdateService.Avalonia.cs. Правка только в Linux/Avalonia; Windows/WPF не затрагивается. -
Linux: скачивание обновления больше не блокирует поток интерфейса: цепочка диалогов переведена на
async, синхронныеDownloadNewBinaryAsync(...).GetAwaiter().GetResult()заменены наawait,dpkg -S(ждёт до 15 секунд) вынесен вTask.Run. Повторные проверки обновлений во время активной цепочки отсекаются черезInterlocked. -
Linux: бинарник пишется на диск потоком, а не буферизуется целиком в памяти: добавлен
HttpCompletionOption.ResponseHeadersReadс явным таймаутом чтения тела. -
Linux: сценарий обновления, исполняемый от root, больше не лежит в общем каталоге: вместо предсказуемого
%TEMP%/ConfigurationManagement/updateиспользуетсяDirectory.CreateTempSubdirectory("cm-update-")с правами 0700 — соседний пользователь больше не может подменить содержимое между записью и запуском от root. -
Linux: после обновления с повышением прав приложение снова открывается: переменные графического сеанса (
DISPLAY,XAUTHORITY,WAYLAND_DISPLAY,XDG_RUNTIME_DIR,XDG_SESSION_TYPE,DBUS_SESSION_BUS_ADDRESS) передаются помощнику и подставляются при перезапуске черезrunuser(иначеrunuserне наследует окружение сеанса, и окно не возвращалось). -
Linux: замена подготавливается до того, как приложению разрешено закрыться: помощник сначала копирует новый файл рядом с целью и делает
chmod, и только потом ставит маркер, по которому приложение выходит; при отказе PolicyKit временные файлы и опустевший каталог убираются.
Версия
- Версия поднята до
0.3.7.12во всех четырёх полях (Version,AssemblyVersion,FileVersion,InformationalVersion) вConfiguration Management.csproj. - Обе сборки — Windows/WPF и Linux/Avalonia (
-p:ForceLinux=true) — проходят без ошибок (0 предупреждений, 0 ошибок).
Полный список изменений — в CHANGELOG.md.
Примечание по сборке Linux
Linux-бинарник ConfigurationManagement-0.3.7.12-linux-x64 при скачивании может потерять бит исполнения. Перед запуском выполните chmod +x ConfigurationManagement (например: ./ConfigurationManagement после chmod +x).