Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Восстановление шрифтов после сбоя (крякозябры в окнах Windows вместо русского текста) (http://forum.oszone.net/showthread.php?t=266056)

Dragokas 13-08-2013 02:40 2200600

Восстановление шрифтов после сбоя (крякозябры в окнах Windows вместо русского текста)
 
Пилотный вариант. Хочу услышать замечания/предложения.

Совместимость: Windows 7 ru x32, x64.

Как запускать

1. Распаковать архив.
2. Нажимаем Win + R, intl.cpl
Либо открыть ПУСК -> Выполнить -> Панель управления -> Часы, язык и регион -> Язык и региональные стандарты.
Проверить настройки, указанные на скриншотах (потом автоматизирую, если это реально).
3. Запустить RU_Codepage_Repair_Win7.cmd
4. Перезагрузить систему.

Алгоритм работы:

1. Создается резервная копия веток реестра:
Цитата:

HKCU\Control Panel\International
HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes
а также файлов *.NLS из Windows\system32
2. Производится замена файлов NLS и веток реестра на "чистые" из оригинального дистрибутива MSDN (папка original).
В процессе работы оригинальные NLS переименовуются в NLS_, т.к. все еще используются системой.
После перезагрузки системы все _NLS удаляются из-под ключа реестра RunOnceEx.
Для получения доступа к NSL, права на них "обнуляются" с предварительным сохранением в ACL-таблицу. После замены файлов - права возвращаются обратно.

Сам Batch-файл:
читать дальше »
Код:

@set @x=0; /*
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
echo Патч восстановления оригинальных файлов русской кодировки
echo.
echo.
:: Проверка версии ОС
If /i "%PROCESSOR_ARCHITECTURE%"=="x86" (set Core=x32) else (set Core=x64)
set /p "=Версия ОС: %Core% "<nul
ver| find "6.1." || (echo Поддерживается только Windows 7& echo.& pause& Exit)
 
:: Получаем права Администратора
if "%1"=="" cscript.exe //nologo //e:jscript "%~f0"& Exit
echo Права Администратора получены.
echo.
echo Этап резервного копирования
echo.
 
:: Переходим в папку с Batch-файлом
cd /d "%~dp0"
 
if not exist Backup md Backup
 
:: Резервирование файлов *.NLS
if exist Backup\*.nls (
  echo Внимание: резервная копия файлов кодовых страниц была создана ранее.
  set ch=
  set /p "ch=Хотите удалить ее? (Y/N) "
  if /i "!ch!"=="Y" del /q Backup\*.nls
)
echo n|>nul copy /-y "%windir%\system32\C*.nls" Backup\*.*
echo.
echo Резервное копирование завершено.
 
:: Резервное копирование заменяемых кустов реестра
if exist Backup\*.reg (
  echo Внимание: резервная копия заменяемых ключей реестра была создана ранее.
  set ch=
  set /p "ch=Хотите удалить ее? (Y/N) "
  if /i "!ch!"=="Y" del /q Backup\*.reg
)
echo n| reg export "HKCU\Control Panel\International" Backup\International.reg
echo n| reg export "HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage" Backup\CodePage.reg
echo n| reg export "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes" Backup\Font.reg
echo.
 
echo.
echo Этап замены файлов кодировок
echo.
 
echo Сохраняю права на NSL-файлы в таблицу ACL
icacls "%windir%\system32\C*.NLS" /save "Backup\CodePage.ACL" /C >nul
echo.
echo Изменяю владельца на себя
takeown /f "%windir%\system32\C*.NLS" >nul
echo.
echo Получаю полные права
echo y|>nul cacls "%windir%\system32\C*.NLS" /e /g "%username%":f
echo.
echo Начат процесс замены файлов на оригинальные...
echo.
:: Переименовую все *.NLS в *.NLS_, чтобы обойти блокировку доступа к файлам, имеющим открытые дескрипторы
echo Переименование
ren "%windir%\system32\C*.NLS" *.NLS_
echo.
echo Замена
copy /y "Original\*.nls" "%windir%\system32\*.*" >nul
echo.
echo Переназначаю владельца на исходного - TrustedInstaller
icacls "%windir%\system32\C*.NLS" /setowner "NT Service\TrustedInstaller" /C >nul
echo.
echo Восстанавливаю права, исходя из эталонной таблицы ACL
echo.
icacls "%windir%\system32" /restore "Backup\CodePage.ACL" /C >nul
 
echo.
echo.Заменяю записи реестра...
reg import Original\International.reg
reg import Original\CodePage.reg
reg import Original\Font.reg
 
:: Удаление переименованных файлов NLS после перезагрузки
set key=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\1
reg add "%key%" /f /v 1 /t REG_SZ /d "cmd /c del /f /q %windir%\system32\C*.NLS_"
 
echo.
echo Все операции завершены.
echo.
echo Требуется перезагрузка системы Windows.
set ch=
set /p "ch=Введите Y для продолжения: "
if /i "%ch%"=="Y" shutdown -r -t 1
 
pause& Exit /B
 
*/new ActiveXObject('Shell.Application').ShellExecute (WScript.ScriptFullName,'Admin','','runas',1);



Время: 05:26.

Время: 05:26.
© OSzone.net 2001-