воскресенье, 11 декабря 2011 г.

Локализация Windows 7 SP1

Я уже однажды писал на тему локализации 7-ки в теме "Vistalizator нам поможет!" для таких версий форточек как Домашняя она же Home Edition Basic/Premium, Начальная она же Starter и Профессиональная она же Professional, но тогда была версия оси без сервисного пакета, а на сегодня и я сам и все бренды уже подтянулись и выпускают свои компы с первым сервисным пакетом (SP1). Поэтому стал ребром вопрос, как бы мне решить проблему локализации с этой версией 7-ки. Автор vistalizator-а в данном случае молчит как рыба, а проблема есть. И я стал копать, точнее гуглить.

Начну с того, что скачать сами файлы установки ака MUI (local packs for Windows 7 SP1) можно отсюда. Просто выбираем свою версию 32 или 64бит, язык и скачиваем. Считайте половину дела сделали :о). Далее можно воспользоваться вот этой подробной инструкцией и сделать всё по ней. Я же, решил взять эту инструкцию на вооружение и написать небольшой скрипт, который будет делать всю работу за меня единожды и навсегда :о).

Что понадобиться для работы скрипта?

На самом деле те, кто глянет начальную инструкцию и захотят быстренько всё сделать, как там прописано, смею заверить, у них ничего не выйдет. Потому как файл, который требуется для локализации нужно ещё как-то вычленить из exe файла. А это дело не для слабонервных, т.к. при обычном запуске файла локализации, этот гад начинает сам себя распаковывать в текущую директорию с именем lp.cab и тут уже дело реакции - нужно быстро скопировать и куда-нибудь вставить этот файл. Самым простым вариантом решения этой проблемы может быть вот такой простой скрипт:
start mui-eng-x64.exe
tasklist
tasklist
ren lp.cab lp_.cab
Но есть и другой вариант. Мне понадобиться одна простенькая программка, которая была написана ещё в далёком 98 году, которая называется EXE2CAB version 3.2 by Yuri Niyazov. Смысл программы прост - извлечение cab файла из exe-шника. Далее мне понадобиться choice.exe из самой форточки %windir%/system32. Ну и пожалуй прямые руки и понимание процесса.

Также нужно создать файл с расширением mui.reg вот с такими данными:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\he-IL]
"LCID"=dword:0000040d
"DefaultFallback"="en-US"
"en-US"=hex(7):00,00,00,00
"Type"=dword:00000092

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\ru-RU]
"LCID"=dword:00000419
"DefaultFallback"="en-US"
"en-US"=hex(7):00,00,00,00
"Type"=dword:00000092

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\en-US]
"LCID"=dword:00000409
"DefaultFallback"="en-US"
"en-US"=hex(7):00,00,00,00
"Type"=dword:00000091
Скрипт расcчитан в моём случае на 3 языка - инглиш, русский и иврит. Но можно по желанию и переделать его на любое количество языков. Главное понимать логику действа.

Итак, сам скрипт по локализации Windows 7 SP1:

@echo off

rem working directory on the server
rem if you running this script locally, then variable SH must be empty, i.e. set sh=
set SH=\\server\mui_langpacks\SP1\

rem checking x32 or x64 bit windows installation
If exist "%programfiles(x86)%" (
goto menu64
) else (
goto menu32
)

:menu32
rem Draw the menu
echo.
echo Please choose an install option
echo.
echo 1 - Exit the installer and return to a shell
echo 2 - install English mui for Windows 7 32bit
echo 3 - install Hebrew mui for Windows 7 32bit
echo 4 - install Russian mui for Windows 7 32bit
echo.
echo.

rem Prompt for a choice
rem Add more options after the /c
rem
rem /c - possible choices
rem /d - default option
rem /m - message to display
rem /t - seconds to wait
rem
rem choice /c: /d /m "" /t
rem
%windir%\system32\choice.exe /c:1234 /d 1 /m "Install option:" /t 30
if errorlevel 4 goto menu4
if errorlevel 3 goto menu3
if errorlevel 2 goto menu2
if errorlevel 1 goto end1
goto menu32

:menu64

rem Draw the menu
echo.
echo Please choose an install option
echo.
echo 1 - Exit the installer and return to a shell
echo 2 - install English mui for Windows 7 64bit
echo 3 - install Hebrew mui for Windows 7 64bit
echo 4 - install Russian mui for Windows 7 64bit
echo.
echo.

%windir%\system32\choice.exe /c:1234 /d 1 /m "Install option:" /t 30
if errorlevel 4 goto menu7
if errorlevel 3 goto menu6
if errorlevel 2 goto menu5
if errorlevel 1 goto end1
goto menu64

rem ############################################################################
rem These are subroutines to run the installer for each menu choice
rem ############################################################################

:menu2
echo.
echo Now installing English language for Windows 7 32bit SP1
%sh%exe2cab.exe %sh%windows6.1-kb2483139-x86-en-us_783d6dd59e2ec8fb0995a059c9c121795bde46c8.exe -q
dism /online /add-package /packagepath:%sh%windows6.1-kb2483139-x86-en-us_783d6dd59e2ec8fb0995a059c9c121795bde46c8.cab
bcdedit /set {current} locale en-US
bcdboot %WinDir% /l en-US
regedit /s %sh%mui.reg
reg delete HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\he-IL /f
reg delete HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\ru-RU /f
del %sh%windows6.1-kb2483139-x86-en-us_783d6dd59e2ec8fb0995a059c9c121795bde46c8.cab /q
goto end

:menu3
echo.
echo Now installing Hebrew language for Windows 7 32bit SP1
%sh%exe2cab.exe %sh%windows6.1-kb2483139-x86-he-il_1849d14777a76c7c5b4ef766490dccc8aed5c56b.exe -q
dism /online /add-package /packagepath:%sh%windows6.1-kb2483139-x86-he-il_1849d14777a76c7c5b4ef766490dccc8aed5c56b.cab
bcdedit /set {current} locale he-IL
bcdboot %WinDir% /l he-IL
regedit /s %sh%mui.reg
reg delete HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\en-US /f
reg delete HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\ru-RU /f
del %sh%windows6.1-kb2483139-x86-he-il_1849d14777a76c7c5b4ef766490dccc8aed5c56b.cab /q
goto end

:menu4
echo.
echo Now installing Russian language for Windows 7 32bit SP1
%sh%exe2cab.exe %sh%windows6.1-kb2483139-x86-ru-ru_6532a8f36ad7d15277d5d60da92555f0fbee4daa.exe -q
dism /online /add-package /packagepath:%sh%windows6.1-kb2483139-x86-ru-ru_6532a8f36ad7d15277d5d60da92555f0fbee4daa.cab
bcdedit /set {current} locale ru-RU
bcdboot %WinDir% /l ru-RU
regedit /s %sh%mui.reg
reg delete HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\en-US /f
reg delete HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\he-IL /f
del %sh%windows6.1-kb2483139-x86-ru-ru_6532a8f36ad7d15277d5d60da92555f0fbee4daa.cab /q
goto end

:menu5
echo.
echo Now installing English language for Windows 7 64bit SP1
%sh%exe2cab.exe %sh%windows6.1-kb2483139-x64-en-us_9b9c8a867baff2920507fbf1e1b4a158572b9b87.exe -q
dism /online /add-package /packagepath:%sh%windows6.1-kb2483139-x64-en-us_9b9c8a867baff2920507fbf1e1b4a158572b9b87.cab
bcdedit /set {current} locale en-US
bcdboot %WinDir% /l en-US
regedit /s %sh%mui.reg
reg delete HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\he-IL /f
reg delete HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\ru-RU /f
del %sh%windows6.1-kb2483139-x64-en-us_9b9c8a867baff2920507fbf1e1b4a158572b9b87.cab /q
goto end

:menu6
echo.
echo Now installing Hebrew language for Windows 7 64bit SP1
%sh%exe2cab.exe %sh%windows6.1-kb2483139-x64-he-il_617029400059f0847d7d90d4da673ae4ed43ebd9.exe -q
dism /online /add-package /packagepath:%sh%windows6.1-kb2483139-x64-he-il_617029400059f0847d7d90d4da673ae4ed43ebd9.cab
bcdedit /set {current} locale he-IL
bcdboot %WinDir% /l he-IL
regedit /s %sh%mui.reg
reg delete HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\en-US /f
reg delete HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\ru-RU /f
del %sh%windows6.1-kb2483139-x64-he-il_617029400059f0847d7d90d4da673ae4ed43ebd9.cab /q
goto end

:menu7
echo.
echo Now installing Russian language for Windows 7 64bit SP1
%sh%exe2cab.exe %sh%windows6.1-kb2483139-x64-ru-ru_0587eb296a2f04e0d3699650d39b53ee18b97a79.exe -q
dism /online /add-package /packagepath:%sh%windows6.1-kb2483139-x64-ru-ru_0587eb296a2f04e0d3699650d39b53ee18b97a79.cab
bcdedit /set {current} locale ru-RU
bcdboot %WinDir% /l ru-RU
regedit /s %sh%mui.reg
reg delete HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\en-US /f
reg delete HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\he-IL /f
del %sh%windows6.1-kb2483139-x64-ru-ru_0587eb296a2f04e0d3699650d39b53ee18b97a79.cab /q
goto end

rem ######################################################################
:end
echo.
echo !!! That's all folks !!!
echo.
echo Have a nice day!
echo.
pause
start shutdown -r -t 10 -c "Attension please!!! Your computer is going to restart after 10 seconds!!!"

:end1
exit
Запускать скрипт нужно из под windows 7 с правами администратора. Важно одно НО - перед тем как запускать сам скрипт откорректируйте под себя переменную SH вначале скрипта, если будете запускать не с сервера, а локально, к примеру, с флешки, то оставьте переменную SH пустой (set sh=). По окончанию скрипт автоматически перезагрузит компьютер на автомате. Можно ещё заодно отключить UAC если на то пошло, но так как это требует перезагрузки, то я не стал усложнять скрипт. Вот в общем-то и всё. :о)

Update от 11.12.2011: Забыл отписать немного о логике скрипта. На самом деле она очень проста, но можно задасться вопросом: "А на кой чёрт нужен этот первый mui.reg файл?". Из опыта скажу, что по неясным обстоятельствам, т.к. я тестировал скрипт под vmware, то столкнулся со странной проблемой, что в некоторых случаях при установке пакета локализации и дальнейшей перезагрузке, форточка выпадает в BSOD с ошибкой 0x0000012A вот такого вот вида:

Чисто из интереса я провёл небольшое расследование и выяснилось, что иногда после работы скрипта исчезала ветка реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\[language tag]

где language_tag=en-US или ru-RU или he-IL. Почему это происходит мне неизвестно, но поняв, что это всё-таки происходит и возможна некоторая проблема в работе скрипта, мной было принято очень простое решение. Даже если скрипт не всегда корректно укладывает в реестр нужные ему данные, я ему помогу с этим. Вот поэтому идёт сначала импорт рег-файла, а затем уже стирание ненужных веток для ненужных языков. Как говорил Папанов в фильме "Бриллиантовая рука": "и овцы целы и волки сыты, Кутузов".

Update от 31.05.2012:

На самом деле уже с 22 апреля 2012 можно не париться со всякими скриптами, а воспользоваться старым добрым Vistalizator-ом. Это просто проще для обычных пользователей. Да в общем и технарям программка придётся по-вкусу. 

суббота, 3 декабря 2011 г.

Вилы или температура на чипсете материнской платы измеряется...!

На самом деле эта история началась очень обыденно. Был принесён компьютер на ремонт, который постоянно перегружался. Невооружённым глазом было видно, что проблема во взбухших конденсаторах на материнке. Компьютер был не первой свежести, где-то года 4. Было решено менять материнскую плату на более продвинутую - Gigabyte GA-G41MT-S2PT/GA-G41MT-S2P. Был дан ценник на ремонт. Получено согласие. И начат сам ремонт.

Сказано-сделано. Заменил мат. плату. Процессор Pentium D 2.8GHz. Согласно сайту Gigabyte - http://www.gigabyte.com/support-downloads/cpu-support-popup.aspx?pid=3960 этот процессор поддерживается. Что оказалось странным - на складе имелась мат. плата с такими же характеристиками, но от компании FoxConn, так вот на ней этот "старичок" процессор не поддерживался, а у гигабайта с этим делом было хорошо. Вот и решился на гигабайт. Как только сменил материнку попёрли чистые грабли. Комп всё время стопорился. Вёл себя абсолютно неадекватно. В любой момент мог застыть на месте - по научному это freeze - это когда мышь и клавиатура вообще не реагируют. Это всегда проблема железа. Софт в этом обычно не виноват. Решить такую проблему всегда не легко, потому что тут уже начинаешь думать обо всех частях компьютера. Это может быть и блок питания, и не совместимость оперативной памяти и вообще всё что угодно. И было решено начать тестирование всего и вся.

Все тесты к сожалению не дали никакого результата. Компьютер зависал только в операционной системе и абсолютно хаотично. Хотя был найден некий общий знаменатель - обычно после такого ремонта, я тестирую температуру на процессоре с помощью таких программ как Everest aka Aida64. Очень удобный температурный тест. И вот заметил что после небольшого теста в районе минута-пять идёт фризинг. Мне стало это дело очень интересным и я стал уже ручками ощупывать что бы это могло так греться. Всё было вроде бы в порядке, но вот одно несколько было странным - радиатор на чипсете был довольно горячим. Это несколько смущало. Решил поискать в интернете какие есть программы для измерения температуры на чипсете. Оказалось, что есть такие, скачал парочку - одна из них была SpeedFan. Очень надо сказать удобная программа, но к сожалению, и она не смогла точно показать температуру на чипсете - всё время показывала 55 градусов. Это конечно много, но не смертельно.

В итоге плюнул я на все эти тесты и тупо попросил у своего босс со склада нормальный процессор под эту материнку - Dual Core E5700. И о чудо! Чипсет стал холодный, ну может быть чуть тёплым под тестовой нагрузкой, но никак не горячим!!! Как же я матюкался на гигабайт. Вообще сцука, совсем совесть потеряли. Ну не тестируйте, так и не пишите ерунды на сайте, мол всю линейку 775 может деражать мат. плата. НЕ МОЖЕТ!!! Как оказалось связка G41 + DDR3 даёт ограничение и я думаю, но не уверен, что как раз все процессоры поколения прескотт, т.е. это те у которых идёт индекс "D" в названии просто не совместимы с этими материнками.

Ну а история с ремонтом закончилась очень прозаически, после вот такого вот расследования, длящегося чуть ли не неделю, последовало решение, за неимением нужной новой мат. платы на складе отремонтировать старую, но работающую. Все взбухшие и подозрительные конденсаторы были заменены на новые и плата и по сей день корректно функционирует и приносит радость своему владельцу.

з.ы. ещё в 2002 году, когда впервые попал в лабу, спросил у техника, собирающего компьютеры - Как мол ты знаешь, что компьютер впорядке и не будет делать проблем. На что получил довольно весёлый ответ - по звуку вентиляторов - если жужжат без проблем, значит всё будет ОК. Тогда мне этот ответ показался очень непрофессиональным. И потому начав работать, я пришёл к определённой системе правил и тестов, которые позволяют за некоторое определённое количество времени поставить диагноз и определить проблему. Но сегодня вспоминая тогда тот ответ техника, всё-таки нахожу некую рациональность и в данном подходе. оказывается чипсет или правильнее сказать мост - тестируется РУКАМИ :о)