Несколько дней назад меня попросили помочь с достаточно нетривиальной задачей. Представьте — есть достаточно отдаленная от цивилизации деревня в которой требуется вести коммерческую (торговую) деятельность. Разумеется, есть ПК под управлением Windows 10 — именно на него требуется установить торговое ПО. Программа установки этого ПО требует наличия .NET Framework 4.8 — и проверяет его наличие достаточно дотошно, не опираясь только лишь на записи в реестре. Удаленный доступ к ПК через интернет есть, но канал не настолько жирный чтобы без проблем тягать гигабайты. Пока вроде ничего необычного, скачай да поставь нужный «фраймворк»? Не совсем.
Да, ПК работает под управлением Windows 10, но только вот билд «десятки» — 10240. Это, на минуточку, RTM версия образца 2015-го года. Официальный предел — это предустановленный .NET Framework 4.6, для установки же версии 4.8 нужно сначала серьезно обновить операционку. Но за все это время система не получала ни одного обновления и обновлять её сейчас — крайне плохая затея, ведь нет никаких гарантий, что весь накопленный софт за последние десять лет эксплуатации процедуру обновления переживет. Нет гарантий, что система вообще сохранит работоспособность. Короче, сломать всё — не просто легко, а очень легко. И, тем не менее, .NET Framework 4.8 все равно нужен.
Так как в этом деле нужна максимальная осторожность, я создаю виртуальную машину и раскатываю ровно такой же билд «десятки», как и на удаленном ПК. Затем я снимаю снэпшот с «чистой» системы. Время проводить эксперименты.
Сначала я вспоминаю, что на Windows 7 тот же .NET Framework 4.8, в целом, устанавливался нормально. Были даже «авторские репаки» с необходимыми для корректной установки обновлениями и модифицированным инсталлятором — который, в отличие от официального установщика, не спотыкался при малейшем огрехе. Разумеется, подобные наработки я всегда сохраняю — и сейчас самое время пустить их в ход. Но увы, даже модифицированная программа установки не способна подружить .NET Framework 4.8 со старой «десяткой». Откатываюсь до ранее снятого снэпшота.
Окей, зайдем с другой стороны. Спустя год после выпуска RTM был выпущен билд 14393 с долгосрочной поддержкой, она же 1607, она же LTSB. И никаких проблем с установкой .NET Framework 4.8 там уже не было, причем помимо обычной установки можно было получить заветную версию во время процедуры обновления. Концепт начинает вырисовываться — нужно заставить RTM прикинуться LTSB, раскатать нужное вручную обновление и затем «вернуть все как было». Придумав такой достаточно тривиальный концепт я с удивлением обнаружил, что разработчики abbodi1406 и whatever127 уже подготовили весь необходимый инструментарий для воплощения задуманного. Сначала я выкачиваю нужные обновления для русскоязычной локализации и x64 разрядности:
windows10.0-kb4486129-x64_0b61d9a03db731562e0a0b49383342a4d8cbe36a.msu
Microsoft .NET Framework 4.8 for Windows 10 Version 1607 and Windows Server 2016 for x64 (KB4486129)
windows10.0-kb5066136-x64-ndp48_33a9703bab6ff8534a1cc8a590d85b179a24718d.msu
2025-10 Cumulative Update for .NET Framework 4.8 for Windows 10 Version 1607 for x64 (KB5066136)
windows10.0-kb4486150-x64_aa66bed541a67eabf39f41f8ea1be9287d4670db.msu
Microsoft .NET Framework 4.8 Language Packs for Windows 10 Version 1607 (KB4486150)
После чего кладу в директорию рядом со сценарными файлами из вышеуказанного инструментария. Идём по инструкции:
1. Отключаем Windows Defender или иное антивирусное решение, способное воспрепятствовать процедуре вмешательства в систему
2. Запускаем сценарный файл 1-Patch-Servicing_Stack.cmd от имени администратора и подтверждаем Y выполнение
3. Запускаем сценарный файл DNF48.cmd от имени администратора и ожидаем окончания установки всех 3-х обновлений, перезагружаемся
4. На этом этапе загрузка Windows может застопориться, появится окно с предложением продолжить штатную загрузку — вроде ничего такого, но может оказаться блокирующей задачей при удаленной работе
5. Запускаем сценарный файл 2-Restore-Servicing_Stack.cmd от имени администратора и подтверждаем Y выполнение, перезагружаемся
Если всё сделано правильно, то теперь у нас Windows 10 RTM с установленным и работающим.NET Framework 4.8 — вопреки официальной позиции. Теперь что касаемо «стопора» во время загрузки — вы не столкнётесь с этой особенностью если заранее переключиться на «старое» меню загрузки с выбором вариантов через F8:
bcdedit /set {current} graphicsmodedisabled yes
bcdedit /set {current} bootmenupolicy legacy
bcdedit /set {current} bootux basic
