Я удалил приложение nomacs для просмотра картинок и обнаружил в меню "Открыть с помощью" две проблемы:
1. Приложение осталось вверху списка в качестве дефолтного.
2. Для других приложений отсутствовала кнопка Always, чтобы всегда открывать в них.
Можно пойти в Параметры - Приложения и задать для нужных графических форматов желаемую программу. Но у картинок множество типов, и никогда не знаешь, какой понадобится послезавтра. Каждый раз лезть в Параметры не хочется. Да и сам факт мусора неприятен. Вот как я это решал.
🧹 1. Отмена регистрации приложения для типов файлов
Это приложение прописалось в разделе реестра
HKCU\Software\Classes, создав для каждого типа графических файлов подраздел вида \nomacs.png.3. Если удалить разделы программы из классов, приложение не будет предлагаться в качестве дефолтного для Open with. Задача решается перебором в скрипте #PowerShell (в командах удаления добавлен параметр
-WhatIf для страховки от стрельбы в ногу :)$classesPath = "HKCU:\Software\Classes"
$appKeys = Get-ChildItem -Path $classesPath | Where-Object { $_.PSChildName -like "nomacs.*" }
if ($appKeys) {
foreach ($key in $appKeys) {
Write-Host "Deleting class key: $($key.Name)" -ForegroundColor Yellow
Remove-Item -Path $key.PsPath -Recurse -Force -ErrorAction SilentlyContinue -WhatIf
}
}
🪚 2. Удаление пользовательских ассоциаций
Здесь сложнее. У каждого расширения в разделе реестра FileExts есть два подраздела:
•
OpenWithProgids - ИД приложений, которые могут открывать тип файла•
UserChoice - выбор пользователя с ИД и хэшем приложенияGet-ChildItem HKCU:Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\
Hive: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png
Name Property
---- --------
OpenWithProgids nomacs.png.3 :
UserChoice ProgId : nomacs.png.3
Hash : fjmDvOs2rGo=
Здесь слева имена подразделов, справа - их параметров. Поэтому надо перебрать скриптом все подразделы, где эти параметры содержат записи о несуществующем приложении, и удалить их. Для экономии места я вынес скрипт в Pastebin.
🔬 Нюансы
Скрипты на перебор простенькие, создание таких я давно делегирую нейронке. Выдав скрипт, Gemini предупредила, что удаление из FileExts может не сработать. И тогда нужно запускать скрипт от имени SYSTEM или TrustedInstaller (TI) с помощью psexec от Sysinternals.
В моем случае параметры nomacs удалились без проблем. Хотя в целом нейронка права: там нельзя просто взять и удалить. Но есть нюанс © Её обходной путь тоже не сработает 😎
Во-первых, если вы запускаете редактор реестра от имени другой учётной записи, даже системной, то видите её раздел реестра HKCU, а не свой. Другими словами, ваших параметров там не будет. И, кстати, psexec не позволяет запускать исполняемые файлы от имени TI, хотя других вариантов полно.
Во-вторых, параметры в разделе FileExts защищены не столько посредством ACL (это можно было менять скриптом), сколько специальным драйвером UCPD, User Choice Protection Driver. Microsoft добавила его в 2024 году для дополнительной защиты файловых ассоциаций от изменений без ведома пользователя (подробнее: раз, два).
На это есть несколько обходных путей.
🪟 Встроенными средствами вы можете:
• войти в другую учётную запись или Windows RE и подключить в HKU ваш
NTUSER.DAT (с корректировкой путей в скрипте, примерно так) • временно изменить способ запуска службы UPCD, чтобы после перезагрузки ОС не активировался драйвер
🧰 Сторонняя утилита SetUserFTA позволяет сразу задать желаемые ассоциации.
Примеры:
• настройка png:
setuserfta .png IrfanView.png• импорт конфигурационного файла:
setuserfta c:\file.cfgИ сам файл:
.png, IrfanView.png
.jpg, IrfanView.jpg
.jpeg, IrfanView.jpeg
Здесь создаётся новая связь с конкретным приложением. Причём в обход работающего драйвера UCPD ✌️