Показать полную графическую версию : [решено] Добавление OEM информации - все вопросы
Страниц :
1
2
3
4
5
6
[
7]
8
9
10
11
12
prokazzza
04-11-2006, 10:29
Sanja Alone я посмотрел ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Но, правильно ли это делать?
Посмотри вот прикрепляю файл Uninstall.reg у мя тама действительно перечисленно 130 обновлений.
http://www.myemailemoticons.com/drop_down/objects/objects_14.gif Нужно типо анализа чтоли продумать в OEM, проводить такой между ветками анализ, например брать из ветки HKLM\SOFTWARE\Microsoft\Updates обновления поставить их в список OEM так чтобы они шли первыми, а далее проанализировать прописанные обновления например из ветки HKLM\SOFTWARE\MicrosoftWindows\CurrentVersion\Uninstall, но так чтобы двойные не вносились, а вносились тока те которых действительно нехватает в списке "Сведенья о поддержке". Потом следующую ветку анализировать например далее HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix отсуда взять недостающие обновления . Тогда уж действительно будут перечислены все обновления которые были внесены в систему.
Vadikan
За что нас так, мы же стараемся как лучше и точнее
Sanja Alone
Q147222 да и чёрт с ним, оно так старо, что я даже найти его не смог у дяди Билла, видимо уже давно заменили новым.
Может просто обновление установлено каким-то нестандартным способом (например, через UpdatePack)Можно ведь и вручную запустить oeminfo.cmd после установки любого пакета и будет всё прописано как надо.
alcosЗа что нас так, мы же стараемся как лучше и точнееТак я ж любя :)
Sanja Alone
05-11-2006, 05:56
Новая версия oeminfo.cmd (2006-11-05)
Что изменилось:
Учтены обновления, перечисленные в ветке Uninstall (начинающиеся с KB + 6 цифр).
Смотреть (http://wiki.oszone.net/index.php/Изменение_OEM_информации)
Качать (http://wiki.oszone.net/images/1/19/OEMINFO.rar)
Sanja Alone
Твоя конструкция rem Обеспечение правильности отработки мультизагрузочного CD/DVD
if exist "%CDROM%\I386\winn?.sif" (
set WINNTSIF=%CDROM%\I386\winn?.sif
) else (
if defined REGEXE (
for /F "tokens=3 delims= " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v SourcePath') do set SrcP=%%j
) else (
for /F "tokens=3 delims= " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v SourcePath') do set SrcP=%%j
)
if exist "!SrcP!\winn?.sif" set WINNTSIF=!SrcP!\winn?.sif
)для определения пути к дистрибутиву слишком громоздкая и не срабатывает, если в системе стоит два CDROM-а. Определяется путь для переменной например: !SrcP!=D:\WinDistr\1XP1\i386 вместо !SrcP!=E:\WinDistr\1XP1\i386, получается, что первые два символа не заменяются на букву CDROM-а, куда на данный момент вставлен диск и естественно путь получается неверный, соответственно CD-KEY не считывается.
Для чего сделана привязка "Определение версии REG.EXE" к версии файла при определении пути к "winn?.sif" да и далее тоже, я так и не понял, они что по разному инфу с реестра читают или есть другие нюансы? Просто у меня нет английской винды и я этого не знаю. Ведь в реестре путь к i386 прописан в любой винде по ненашему. Сейчас столкнулся с тем, что в реестре путь к дистрибутиву не прописался на виртуалке, может просто из за сбоя, который произошёл у меня.
Я для себя выбрал мой вариант определения, мне кажется, что так проще и всё работает.
::Считываем всю строку ключа "SourcePath" из реестра и присваеваем её переменной "WINNTSIF"
for /F "usebackq tokens=3 delims= " %%i in (`REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v SourcePath`) do set WINNTSIF=%%i
set WINNTSIF=%WINNTSIF:~2%
::Обеспечение правильности отработки мультизагрузочного CD/DVD
if exist %CDROM%%WINNTSIF%\winn?.sif (
set WINNTSIF=%CDROM%%WINNTSIF%\winn?.sif
)
Есть ещё одна проблема с правильным определением даты и времени установки системы. Если файл "Oeminfo.cmd" запускается при установке системы, то с этим всё правильно, но, если вы запускаете этот файл на уже давно установленной системе (например после обновления), то и дата и время прописываются сегодняшние, т.е. те, которые на момент запуска установлены в системе. Это есть неправильно. Я тут порылся в реестре и нашёл пару мест с правильными (неизменяемыми) необходимыми данными. Родной параметр даты установки в реестре зашифрован (InstallDate=0х44913fe3(1150369763)), пришлось искать другой подходящий.
::Считываем дату установки системы
for /F "tokens=3 delims= " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\WBEM\CIMOM" /v SetupDate') do set DT=%%j
::Считываем время установки системы (тут время в GMT прописано, надо тоже пересчёт сделать)
for /F "tokens=3 delims= " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\WBEM\CIMOM" /v SetupTime') do set TM=%%j
::Считываем дату установки последнего обновления (это просто пример, реально надо вычислять)
for /F "tokens=3 delims= " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Updates\Windows XP\SP3\KB873339" /v InstalledDate') do set UD=%%jПроблема возникает с вычислением даты последнего установленного обновления. Даты прописываются только в ветке HKLM\SOFTWARE\Microsoft\Updates\Windows XP\SP3
У меня маловато знаний для того, чтобы из кучи обновлений выбрать самую последнюю дату установки. Вот я и предлагаю знающим (Sanja Alone) идею. Возникает вопрос, а как программы типа Everest и им подобные дату установки вычисляют и ключ продукта?
Один выделенный момент в строкеecho [Support Information]>> "%OEMFILE%"
if %lang% == 00000419 (
echo Line!i!=%PN% Professional VLK v%CV% %CSDV% >> "%OEMFILE%"
set /A i+=1
echo Line!i!=Версия сборки: %BUILD% >> "%OEMFILE%"
) else (
echo Line!i!=OS:%PN:Microsoft=% %CSDV:Service Pack=SP% version %CV% build %BUILD%>> "%OEMFILE%"
)Если убрать пробел перед стрелками >>, то вообще ничего в файл "oeminfo.ini" не выводится для дополнительного окна и кнопка естественно отсутствует!
По прежнему отсутствуют в списке:
MSXML 6.0 Parser (KB925673)
Клиент управления правами Windows (KB839178)
Прячутся тут::Считываем из реестра информацию о "MSXML 6.0 Parser (KB925673)" и дописываем в файл Updates.txt
for /F "usebackq tokens=* delims==" %%r in (`REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{031816E0-7ED4-4F9B-986D-CE9E1A1CC6E5}" /v DisplayName`) do set PS=%%r
echo %PS:~-9,8% >> %HF%\Updates.txt
::Считываем из реестра информацию о "Клиент управления правами Windows SP2 (KB917275)" и дописываем в файл Updates.txt
for /F "usebackq tokens=* delims==" %%r in (`REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{B67DDF3E-93B1-413A-8AB1-72FF48F4CBFE}" /v HelpLink`) do set CL=%%r
echo KB%CL:~-6,8% >> %HF%\Updates.txt
Приведу пример последнего файлика от Sanja Alone немного подправленного и изменённого лично для себя, мне такое оформление больше нравится. Английский вариант я не изменял.
prokazzza
05-11-2006, 15:38
alcos
У тя нормальное OEMINFO получается
http://www.kinozal.ws/pic/stamp/stamp073.gif
щас написано 136 обновлений включая написано что WMP11 включен это хорошо
WGA WMFDist1 Wudf0100 - вот эту строку в конце я немного непонял???
можно убрать это красный фон, а сделать нормально черный
вот эта строка чет неправильно выдает инфу - Дата установки последнего обновления: 12/13/2004
а кто такой kolobok:)
-------------------------------------------------------------------------------------------------
OEMINFO от Sanja Alone в последних версиях я никакого результата не вижу
Новая версия oeminfo.cmd...................Что изменилось:
да ниче не изменилося как было написано 104 так оно так и осталося!!!
prokazzza
да ниче не изменилося как было написано 104 так оно так и осталося!!!
Странно... У меня оба CMD-шника (от Sanja Alone и от alcos) выдают 136 шт. :)
Я уже как-то писал: запусти с ключом "/R".
prokazzza
05-11-2006, 16:03
YuriPet
а посмотреть пост 115 (http://www.forum.oszone.net/post-505208-115.html) :)
prokazzza
Да ладно... Думал - может забыл?
По поводу можно убрать это красный фон, а сделать нормально черный - убери (закомментируй) строку "Color CB" и усё... :)
alcos
::Считываем всю строку ключа "SourcePath" из реестра и присваеваем её переменной "WINNTSIF" for /F "usebackq tokens=3 delims= " %%i in (`REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v SourcePath`) do set WINNTSIF=%%i set WINNTSIF=%WINNTSIF:~2%
Я применяю аддон Z_DRV_INST (с копированием дистрибутива т.е. директории i386 в C:\Windows)
Поэтому SourcePath у меня ="C:\Windows" и при запуске твоего Oeminfo.cmd скрипт выдает сообщение:"Не найден файл \Windows\"!!!!
::Считываем из реестра информацию о "MSXML 6.0 Parser
Я этой секции в твоем файле не нашел!!?
И откуда берется переменная %HF%?
Sanja Alone
06-11-2006, 04:56
alcos
да и далее тоже, я так и не понял, они что по разному инфу с реестра читают или есть другие нюансы?Они по-разному выводят - попробуй запустить oeminfo.cmd с англ. reg.exe. Или ты считаешь, что я просто так усложнил код практически одинаковыми строками? :)
По прежнему отсутствуют в списке:В файле prokazzza, MSXML 6.0 Parser принадлежит ветке {AEB9948B-4FF2-47C9-990E-47014492A0FE}. Выходит, что имя ветки не зафиксировано. Какой тогда смысл вносить подобную инфу при пом. oeminfo.cmd. Между прочим, стандарная утилка от MS systeminfo.exe вообще как-то странно выводит список обновлений - не вдаваясь в тонкости... Да, я так и не видел твоих reg-файлов соотв. веток. Как ты мне предлагаешь анализировать не имея материала?
если вы запускаете этот файл на уже давно установленной системе (например после обновления), то и дата и время прописываются сегодняшние, т.е. те, которые на момент запуска установлены в системеЭто дело вкуса :)
чтобы из кучи обновлений выбрать самую последнюю дату установкиЭто довольно сложно, а толку мало.
prokazzza
да ниче не изменилося как было написано 104 так оно так и осталося!!!Пункт один: сначала анализируем, потом возмущаемся.
Пункт два: с твоими файлами веток Updates и Uninstall вот такой я получил результат при тесте (oeminfo /r):
[General]
Manufacturer=Sanja Alone
Model=Unattended XP DVD
[Support Information]
Line1=ОС: Windows XP SP 2 версия 5.1 сборка 2600.xpsp.050301-1521
Line2=
Line3=Дата и время установки (обновления): 06.11.2006 (03:44)
Line4=
Line5=Установленные компоненты и обновления (136):
Line6=
Line7=KB319740 KB873339 KB883667 KB884267 KB884575 KB884883
Line8=KB885353 KB885626 KB885835 KB885836 KB885855 KB885894
Line9=KB886612 KB886677 KB886716 KB887078 KB887472 KB887606
Line10=KB887626 KB888111 KB888302 KB888402 KB888656 KB889016
Line11=KB889315 KB889320 KB889673 KB889858 KB890046 KB890831
Line12=KB890859 KB891122 KB891781 KB892313 KB893240 KB893241
Line13=KB893357 KB893756 KB893803 KB895181 KB895316 KB895572
Line14=KB896256 KB896358 KB896414 KB896423 KB896424 KB896428
Line15=KB896626 KB897338 KB897586 KB897663 KB898461 KB898549
Line16=KB898900 KB899271 KB899587 KB899589 KB899591 KB900399
Line17=KB900485 KB900725 KB901017 KB901214 KB902344 KB902400
Line18=KB903234 KB904412 KB904706 KB904942 KB905414 KB905749
Line19=KB906569 KB907265 KB907658 KB907865 KB908519 KB908521
Line20=KB908531 KB909095 KB909520 KB909608 KB910437 KB911280
Line21=KB911562 KB911565 KB911567 KB911854 KB911927 KB912817
Line22=KB912919 KB913296 KB913538 KB913580 KB914388 KB914389
Line23=KB914841 KB915865 KB916595 KB916846 KB917344 KB917422
Line24=KB917537 KB917730 KB917953 KB918005 KB918093 KB918439
Line25=KB918766 KB918837 KB918899 KB919007 KB920214 KB920670
Line26=KB920683 KB920685 KB920872 KB921398 KB921401 KB921413
Line27=KB921883 KB922582 KB922616 KB922819 KB923191 KB923414
Line28=KB923996 KB924191 KB924496 KB924867 KB924941 KB925486
Line29=WGA WMFDist1 wmp11 Wudf0100Если ты как-то по-другому тестируешь (или не с теми файлами, что здесь выложил), то опиши методику... Если же нет, то прекрати поток обвинений!
prokazzzaalcos
У тя нормальное OEMINFO получается
щас написано 136 обновлений включая написано что WMP11 включен это хорошоЭто спасибо должно быть адресовано Sanja Alone, я только оформил под себя, мне так больше нравится.
WGA WMFDist1 Wudf0100 - вот эту строку в конце я немного непонял???Это вопрос тоже к Sanja Alone, он рулит вычислениями обновлений.
YuriPetСтранно... У меня оба CMD-шника (от Sanja Alone и от alcos) выдают 136 шт.Действительно ничего не изменилось, так как я менял в файле от Sanja Alone только оформление произвольного текста и выбор даты, времени установки системы и последнего обновления. Вообще инфу о дате можно брать из .NET Framework вреестре, там формат хороший, да и все его ставят, но, вероятно, не все при установке. Время вообще можно обычное брать - это не критично, как дата.
А разница в показаниях 104 и 136 достигается просто - я по умолчанию включил следующий параметр в файле "Oeminfo.cmd", так более информативно, потому что не все обновления прописывают свои каталоги безопасности в определённом месте.
::Использовать ли реестровый метод для составления списка апдейтов (1 - да; 0 - нет)
set REGMODE=1prokazzzaвот эта строка чет неправильно выдает инфу - Дата установки последнего обновления: 12/13/2004Правильно, неверно, внимательно прочти мой пост 124, там описана эта проблема. Я просто пример привёл, а для осуществления этой идеи надо думать. Можно пока вписывать обычную дату или закомментировать строку.
а кто такой kolobok - нарисуй в своём файле что хочешь:)
sattva::Считываем из реестра информацию о "MSXML 6.0 Parser
Я этой секции в твоем файле не нашел!!?
И откуда берется переменная %HF%?Этой секции действительно нет Sanja AloneВ файле prokazzza, MSXML 6.0 Parser принадлежит ветке {AEB9948B-4FF2-47C9-990E-47014492A0FE}. Выходит, что имя ветки не зафиксировано. Какой тогда смысл вносить подобную инфу при пом. oeminfo.cmdПеременная %HF% есть не что иное, как:set HF=%SystemDrive%
Sanja AloneОни по-разному выводят - попробуй запустить oeminfo.cmd с англ. reg.exe. Или ты считаешь, что я просто так усложнил код практически одинаковыми строками? Так я и писал выше: "Просто у меня нет английской винды и я этого не знаю." Таперь узнал. Если не затруднит, то приведи тут пример чтения одной строки разными версиями reg.exe. :help:
Вообще, конечно, хотелось бы довести этот файлик до совершенства, но слишком сложно, у одних работает, у других несовсем, да и дядя Билл кидает все записи в реестре беспорядочно.
Я тут ещё чуток подправил (исправил) в файлике оформление даты и время, более приятный и правильный вид.
Sanja Alone
08-11-2006, 05:50
alcos
приведи тут пример чтения одной строки разными версиями reg.exeДа практически любой if в моем oeminfo и есть примером. Но, как можно увидеть, необходимость в разделении на версии reg.exe возникает только при определении в кач-ве разделителей подстрок в команде for пробелов/табуляций. Вот, что выводит рус. и англ. версии reg.exe при выполнении команды:
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v SourcePath
рус. REG.EXE версии 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158) (Windows XP SP2 VL):
! REG.EXE VERSION 3.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
SourcePath REG_SZ G:\SETUP\XP\UNATDRCT\I386
англ. REG.EXE версии 5.2.3790.1830 (srv03_sp1_rtm.050324-1447) (Windows Server 2003 SP1):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
SourcePath REG_SZ E:\SETUP\2K3\UNATTEND\I386
Бросается в глаза наличие версии файла в выводе русского reg.exe + разное к-во пробельных символов (и их вид - где-то это пробелы, а где-то табы). Короче говоря, обобщить что-либо здесь сложно - нужно тестить.
prokazzza
WGA WMFDist1 Wudf0100 - вот эту строку в конце я немного непонял???А что тут не ясно? Сам же задавал вопрос (http://forum.oszone.net/post-505712-117.html), на к-рый я ответил однозначно (http://forum.oszone.net/post-506751-119.html) - "Из ветки HKLM\SOFTWARE\Microsoft\Updates - ВСЕ!". Если не нравятся обрезанные названия н-рых обновлений, то измени значение переменной UPNAMEL с 8 на, к примеру, 11 - этого вполне хватит.
В принципе, у меня даже была идея доставать описания обновлений из параметров Description и/или PackageName. Вот тестовый код для Description-ов (для PackageName будет тоже самое) - выводит описания в файл up.txt (ес-но, учтены не все обновления):
@echo off
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /F "tokens=5* delims=\" %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Updates" /s ^| findstr /i /v "REG_ FileList"') do if %ERRORLEVEL%==0 (
for /F "tokens=* delims=\" %%m in ('echo %%j\%%k^| findstr /i "[\\].*[\\]"') do (
set regkey=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\%%m
for /F "tokens=3 delims= " %%g in ('reg query "!regkey!" /v Description 2^>nul') do (
echo %%g>>up.txt
)
)
)Но, тут есть серьезная проблема: для одних обновлений определен только параметр Description, для других - PackageName, для третьих - оба (причем с различным содержимым). Нормально реализовать анализ всего этого посредством cmd-файла крайне тяжело. Желающие могут поиграться :)
Dark Engel
01-02-2007, 10:27
Использовал скрипт уважаемого Sanja Alone. Отрабатывает хорошо но.... поля проставляются почему то неправильно :( На картинке внизу это видно.
http://keep4u.ru/imgs/s/070201/4d7df4295aa9b8d1ff.jpg (http://keep4u.ru/full/070201/4d7df4295aa9b8d1ff/jpg)
prokazzza
01-02-2007, 23:22
Dark Engel Почему вы не читали FAQ (http://www.forum.oszone.ru/post-535927-574.html), я же просил прочитать его перед применением OEMINFO.
Dark Engel
02-02-2007, 01:23
prokazzza
посмотрите пожалуйста на рисуно еще раз....
Faq я прочитал
set MANUFACTURER=prokazzza (это будет имя сборщика)
set MODEL=Workgroup (это будет рабочая группа)
Предположим это исправится. А Ram и тип системы?
Думаю что вопрос задаю по адресу и надеюсь что вы сможете мне помочь ?
есть Arun.bat который запускается из "C:\WINDOWS\Temp"
@CLS
@echo off
move oeminfo.cmd C:\WINDOWS\system32
move oemlogo.bmp C:\WINDOWS\system32
%systemroot%\system32\oeminfo.cmd /install /silence
del %systemroot%\Temp\Arun.bat
Здесь oeminfo.cmd (http://wiki.oszone.net/index.php/Изменение_OEM_информации)
Здесь то чего пытаюсь добиться (http://forum.oszone.net/thread-76528-1.html)
Проблема состоит в том что данный батник "Arun.bat" не хочет выполнять команду oeminfo.cmd или игнорирует команду DEL при небольших изменениях при которых отлично проходит работа oeminfo.cmd
Помогите пожалуйста !!![/QUOTE]
Opolon
Попробуй так:
MOVE /Y путь\oeminfo.cmd C:\WINDOWS\system32
MOVE /Y путь\oemlogo.bmp C:\WINDOWS\system32
start /wait %systemroot%\system32\oeminfo.cmd
del %systemroot%\Temp\Arun.bat
Pause
Exit
Если всё пройдет нормально удали Pause в конце, а если не нормально - увидишь что именно стопарит!
ProkVS
В том то вся и загвоздка что файл oeminfo.cmd должен запускаться не через start /wait как указали вы а через /install /silence (это обязательно) но почемуто при таком условии не хочет работать следующая команда "del %systemroot%\Temp\Arun.bat"
Может у кого есть правильный вариант как это воплотить в жизнь !?
файлы oeminfo.cmd и oemlogo.bmp лежат изначально в корне с батником Arun.bat
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.