Войти

Показать полную графическую версию : [решено] Добавление OEM информации - все вопросы


Страниц : 1 [2] 3 4 5 6 7 8 9 10 11 12

Vovanchik
27-05-2005, 13:58
Вот тут (http://www.robvanderwoude.com/robnavbat.html) посмотри... может и найдешь чего путного.

Vadikan
27-05-2005, 14:19
Тут дело скорее в команде dir. Ключ /b выводит список файлов по одному в строку. Можешь попробовать /d например, но тогда нужны другие tokens и delims. Короче, возни много, а толку мало :) Может кому-то и не лень будет возиться с таким, конечно....

Sanja Alone
11-06-2005, 07:07
Моя исправленная и дополненная + РАБОЧАЯ версия oeminfo.cmd
@echo off

SET D=%SYSTEMROOT%\system32\
FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO IF EXIST %%d:\WIN51 SET CDROM=%%d:
rem Обеспечение правильности отработки мультизагрузочного CD/DVD
if exist %CDROM%\i386\winn1.sif (set winntsif=%CDROM%\i386\winn1.sif) else (set winntsif=%CDROM%\i386\winnt.sif)

rem Т.к. используется символ ">", то существующий файл oeminfo.ini будет перезаписан;
rem т.о. нет нужды его предварительно удалять
echo [General]> "%D%oeminfo.ini"
echo Manufacturer=Sanja Alone>> "%D%oeminfo.ini"
echo Model=Unattended XP DVD>> "%D%oeminfo.ini"
echo [OEMSpecific]>> "%D%oeminfo.ini"
rem Достаем из winnt.sif (winn1.sif) серийный номер - от нефиг делать
rem Это работает независимо от вида записи ProductKey=XXXX или ProductKey = XXXX (с пробелами)
rem Серийник не будет виден в окне "Сведения о поддержке"
rem При этом, в файле oeminfo.ini номер будет в строке SerialNo=XXXX
FOR /F "tokens=3 delims==] " %%i in ('find /I /N "ProductKey" %winntsif%') do (echo SerialNo=%%i>>"%D%oeminfo.ini")
echo [Support Information]>> "%D%oeminfo.ini"
echo Line1=Installation Date: %date%>> "%D%oeminfo.ini"
echo Line2=>> "%D%oeminfo.ini"
echo Line3=Installed Hotfixes:>> "%D%oeminfo.ini"
echo Line4=>> "%D%oeminfo.ini"

REM Line Number
SET i=5

rem Мне интересно видеть все, что установилось из каталога SVCPACK,
rem поэтому маску KB*.exe я заменил на *.exe
rem (без ключевого слова usebackq команда dir будет воспринята как
rem имя файла для подстановки в цикл FOR с последующей выдачей сообщения
rem об отсутствии такого файла в текущем каталоге).
For /F "usebackq tokens=1 delims=." %%j in (`dir /B %CDROM%\I386\SVCPACK\*.exe`) do ( (set kbname=%%j) & (call :myprint) )
rem Выход из этого пакетного файла.
rem Команда GOTO принимает в качестве метки перехода строку :EOF, которая вызывает
rem передачу управления в конец текущего пакетного файла. Это позволяет легко
rem выйти из пакетного файла без определения каких-либо меток. (из справки по goto)
GOTO :EOF

:myprint
echo Line%i%=%kbname%>> "%D%oeminfo.ini"
SET /A i+=1
Я постарался все объяснить в комментариях - читайте.

ANDYru
11-06-2005, 18:35
Sanja Alone
насчёт исправленная - в чём ?
насчёт рабочая - только у тебя (у меня например %CDROM%\I386\SVCPACK\*.ca_ там нет ни одного .exe
насчёт серийника - смысла нет (всё равно не видно)
итог : вариант не универсальный - то есть заработает не у всех , так что надобы доработать

Sanja Alone
12-06-2005, 02:45
ANDYru
насчёт исправленная - в чём ?1. Выброшена лишняя проверка/удаление существующего oeminfo.ini и лишняя метка;
2. Цикл FOR теперь реально добавляет инфу в oeminfo.ini, а не просто присутствует "для красоты";
3. Добавлены комментарии на русском для валенков/чайников/юзеров (нужное подчеркнуть).

насчёт рабочая - только у тебя (у меня например %CDROM%\I386\SVCPACK\*.ca_ там нет ни одного .exe1. У меня нет пачки дистрибутивов, чтобы угадать какие в этом каталоге могут быть файлы. У меня там *.exe + *.cat, причем разное к-во тех и других (т.к. дистриб SP1 и ставятся не только KB*.exe, а еще и Q*.exe, dotnet, mdac_typ, gdi_det и т.п.);
2. Можно сделать проверку расширения и в зависимости от этого изменять цикл - если не поленюсь, сделаю. А пока я с XPE мучаюсь, не до того...

насчёт серийника - смысла нет (всё равно не видно)Помести в другое место - будет видно (т.е. не в [OEMSpecific] и не после SerialNo=, а, например, в одну из Line%i%=). Мне это не нужно (да и не только мне), я лишь для порядка сделал добавление серийника в oeminfo.ini

итог : вариант не универсальный - то есть заработает не у всех , так что надобы доработатьА здесь кто-нибудь выкладывал универсальный вариант?
В варианте с CartRoot-ом тоже есть грабли - у меня в CartRoot-е по два файла для KB867282 (KB8672~1.CAT + KB867282-IE6SP1-20050127.163319.cat) и для KB889293 (KB8892~1.CAT + KB889293-IE6SP1-20041111.235619.cat) и аж 4 для KB893803 (KB8938~1.CAT + KB8938~2.CAT + KB8938~3.CAT + KB893803_wxp.cat). И что с этим делать прикажешь?

P.S. Мой файл рассчитан на запуск из cmdlines.txt, т.е. изначально работоспособен только при установке Винды с CD/DVD. На универсальность он не претендует.

ANDYru
21-06-2005, 15:13
вот ёще один вариан (расширенный для пользователей обновлений с http://unattended.nm.ru)
http://rapidshare.de/files/2521318/oem.exe.html

Stesh
27-10-2005, 23:03
ANDYru
вот ёще один вариан (расширенный для пользователей обновлений с http://unattended.nm.ru)
http://rapidshare.de/files/2521318/oem.exe.html
Повторить можно ? А то уже удалили :(

ANDYru
27-10-2005, 23:11
Stesh
можно (естественно адекватно сегодняшнему дню)
http://rapidshare.de/files/6841980/OEMINFO.CMD.html

Stesh
27-10-2005, 23:27
ANDYru
Респект!
Очень удобно!

_CatDog_
27-12-2005, 03:40
опять я :)
решил вот свой диск доделать, винда русская корпоративная

@echo off
SET D=%SYSTEMROOT%\system32\
REM delete oeminfo.ini if exists
if exist "%D%oeminfo.ini" del "%D%oeminfo.ini" /q
FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO IF EXIST %%d:\cat.dog SET CDROM=%%d:
echo [General] >> "%D%oeminfo.ini"
echo Manufacturer=† Котопес † >> "%D%oeminfo.ini"
echo Model=Unattended XP SP2 DVD >> "%D%oeminfo.ini"
echo [Support Information] >> "%D%oeminfo.ini"
echo Line1=Дата установки: %date% >> "%D%oeminfo.ini"
echo Line2= >> "%D%oeminfo.ini"
echo Line3=Установленные обновления: >> "%D%oeminfo.ini"
echo Line4= >> "%D%oeminfo.ini"
REM Line Number
SET i=2
REM List quickfixes without exe extension
For /F "TOKENS=1 delims=*.CA_" %%j in ('dir /D %CDROM%\I386\SVCPACK\KB*.CA_') do ((set kbname=%%j) & (call :myprint))
GOTO :EOF
:myprint
echo Line%i%=%kbname% >> "%D%oeminfo.ini"
SET /A i+=1
:EOF

--------------------
файл должен добавлять в свойства моего компа инфу обо всех установленных апдейтах и дату установки (вы это знаете).
Дату он ставит нормально, а с апдейтами косяк: всего их примерно 40 шт, они находятя на диске в папке I386\SVCPACK и имеют расширение CA_. Короче, этот файл добавляет только 9 первых апдейтов в список и еще текст "42 д ©«®ў 250я106 Ў ©в
0 Ї Ї®Є 0 Ў ©в бў®Ў®¤­®"
В чем ошибка? Как исправить? Хелп ми...

arial
28-12-2005, 23:47
_CatDog_
@echo off

SET CDROM=%~d0
SET D=%SYSTEMROOT%\system32\

echo [General]> "%D%oeminfo.ini"
echo Manufacturer=Автор сборки: arial>> "%D%oeminfo.ini"
echo Model=Windows XP Corporate Edition>> "%D%oeminfo.ini"
echo [OEMSpecific]>> "%D%oeminfo.ini"
echo [Support Information]>> "%D%oeminfo.ini"
echo Line1=Дата инсталяции: %date%>> "%D%oeminfo.ini"
echo Line2=>> "%D%oeminfo.ini"
echo Line3=Установленные обновления: >> "%D%oeminfo.ini"
echo Line4= >> "%D%oeminfo.ini"
SET i=5
For /F "usebackq TOKENS=1 delims=*.CA_" %%j in (`dir /B %CDROM%\I386\SVCPACK\KB*.CA_`) do ((set kbname=%%j) & (call :myprint))
GOTO :EOF
:myprint
echo Line%i%=%kbname%>> "%D%oeminfo.ini"
SET /A i+=1
:EOF

Sanja Alone
30-12-2005, 01:18
_CatDog_
В чем ошибка? Как исправить? Хелп ми...
Посмотри чуть выше (http://forum.oszone.net/showpost.php?p=332020&postcount=23) пример - в комментариях я все объяснил (причем, это было еще в июне). Мне тоже бывает лень читать всю интересующую тему, но здесь не так уж и много написано...


_CatDog_
arial
delims=*.CA_Процитирую справку по команде FOR:
delims=xxx - определение набора разделителей для замены заданных по умолчанию пробела и знака табуляции.
Обратите внимание на выделенное слово - это набор разделителей, а не маска. Т.о., достаточно написать delims=.Кстати, это тоже уже было сказано (http://forum.oszone.net/showpost.php?p=325468&postcount=4) в данной теме, только менее подробно.
Также излишеством является метка :EOF в конце файла. Команда GOTO :EOF и без того передает управление в конец текущего файла. Если помните времена DOS-а, где для ввода файла с клавиатуры исп-сь команда copy con имя_файла.расширение и для завершения ввода нужно было нажать Ctrr+Z, то вот эта комбинация клавиш как раз и добавляла метку окончания файла. И дополнительная метка уже не нужна.

qeraser
01-02-2006, 15:01
Возможно ли изменить, убрать сведения о процессоре, частоте, памяти?

YuriPet
01-02-2006, 21:16
qeraser
Вам сюда (я так думаю! :)) http://forum.oszone.net/showpost.php?p=399069&postcount=2

Sanja Alone
01-02-2006, 23:04
qeraser
сведения о процессоре, частоте
[HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0]
;можно безболезненно изменить
"ProcessorNameString"="AMD Athlon(tm) "
;не уверен в безопасности изменения данного параметра
"~MHz"=dword:000005df
памятине знаю :dont-know

NikLok
13-03-2006, 11:56
Слегка доработал известный ( теперь уже и мне ) скрипт oemlogo.cmd. Доработан потупому (лень искать строковые функции) но работает.
После доработки каждая строка содержит по 6 наименований апдейтов. Столько окно вмещает по ширене по умолчанию. Собственно сам кусок доработки, мож кому надо.

echo Line10= >> "%D%oeminfo.ini"

set i=10
set j=0
set string0=
set string1=
set string2=
set string3=
set string4=
set string5=

FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO IF EXIST %%d\WIN51IP SET CDROM=%%d
For /F "TOKENS=1 delims=.exe" %%j in ('dir /B %CDROM%\I386\svcpack\KB*.exe') do ((set kbname=%%j) & (call :myprint))

if %j% == 1 echo Line%i%=%string0% >> "%D%oeminfo.ini"
if %j% == 2 echo Line%i%=%string0% %string1%>> "%D%oeminfo.ini"
if %j% == 3 echo Line%i%=%string0% %string1% %string2%>> "%D%oeminfo.ini"
if %j% == 4 echo Line%i%=%string0% %string1% %string2% %string3%>> "%D%oeminfo.ini"
if %j% == 5 echo Line%i%=%string0% %string1% %string2% %string3% %string4% >> "%D%oeminfo.ini"

GOTO :EOF
:myprint
if %j% == 0 set string0=%kbname%
if %j% == 1 set string1=%kbname%
if %j% == 2 set string2=%kbname%
if %j% == 3 set string3=%kbname%
if %j% == 4 set string4=%kbname%
if %j% == 5 set string5=%kbname%

if %j% == 5 echo Line%i%=%string0% %string1% %string2% %string3% %string4% %string5%>> "%D%oeminfo.ini"

if %j% == 5 set string0=
if %j% == 5 set string1=
if %j% == 5 set string2=
if %j% == 5 set string3=
if %j% == 5 set string4=
if %j% == 5 set string5=

if %j% == 5 set /A i=%i%+1
set /A j=%j%+1
if %j% == 6 set j=0

:EOF
copy %d%oeminfo.ini C:\oeminfo.ini

Olehen
23-03-2006, 04:51
NikLock,
Слегка доработал известный ( теперь уже и мне ) скрипт oemlogo.cmd.
уточни, пжлст, куда кусок доработки вставлять или код модифицированного cmd приведи.:pray:

NikLok
23-03-2006, 14:15
Olehen
Смотри сообщение 44. Он приведен полностью.

Vadikan
Спасибо. Мне стыдно, там я не додумался искать. :sorry:

Shurikz
01-05-2006, 19:54
Ребят, объясните плиз, а зачем такие заморочки с oemlogo.bmp и oeminfo.ini? Ведь можно их просто положить в $OEM$\$$\System32\
и все. У меня так и сделано и все работает.

Sanja Alone
04-07-2006, 02:14
Доработанный вариант файла oeminfo.cmd

для удобства редактирования "под себя" все значимые переменные вынесены в "шапку"
кол-во апдейтов в одной строке теперь можно задать любое (переменная UPMAX; по ум. 6)
запись серийника (переменная KEY) в oeminfo.ini в двух вариантах (видимом KEYISVISIBLE=1 и невидимом KEYISVISIBLE=0), и только при наличии файла winn?.sif

! Внимание ! На этапе T-12 (cmdlines.txt) фрагмент кода, формирующий список апдейтов НЕ РАБОТАЕТ. Почему? - объяснить не могу (расширенная обработка команд включена по ум. и вроде все должно работать). На загруженной системе и при вызове из секции [GuiRunOnce] файла winnt.sif - все ОК (из секции [SetupParams] на Т-9 не проверял).
@echo off

rem <--- ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ --->
rem полный путь и имя файла oeminfo
set OEMFILE=%SYSTEMROOT%\system32\oeminfo.ini
rem маркерный файл для определения cdrom-а
set TAGFILE=WIN51
rem производитель
set MANUFACTURER=Sanja Alone
rem модель
set MODEL=Unattended XP DVD
rem кол-во апдейтов в одной строке
set UPMAX=6
rem вписывать или нет серийник в файл oeminfo (1 - да; 0 - нет)
set KEY=1
rem сделать ли видимым серийник в окне "Сведения о поддержке" (1 - да; 0 - нет)
set KEYISVISIBLE=0
rem присвоение переменной CDROM буквы cdrom-а, определенной по маркерному файлу
for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%d:\%TAGFILE% set CDROM=%%d:
rem каталог с апдейтами
set UPDATESDIR=%CDROM%\I386\SVCPACK
rem маска для отбора файлов в каталоге апдейтов (*.* - все; *.cat - только каталоги безопасности; KB*.* - только начинающиеся с KB и т.п.)
set UPDATESMASK=*.*
rem Обеспечение правильности отработки мультизагрузочного CD/DVD
if exist %CDROM%\i386\winn1.sif (
set WINNTSIF=%CDROM%\i386\winn1.sif
) else (
if exist %CDROM%\i386\winnt.sif (
set WINNTSIF=%CDROM%\i386\winnt.sif
)
)
rem <--- ОКОНЧАНИЕ ОБЪЯВЛЕНИЯ ПЕРЕМЕННЫХ --->

rem Т.к. используется символ ">", то существующий файл oeminfo.ini будет перезаписан;
rem т.о. нет нужды его предварительно удалять
echo [General]> "%OEMFILE%"
echo Manufacturer=%MANUFACTURER%>> "%OEMFILE%"
echo Model=%MODEL%>> "%OEMFILE%"

rem Достаем из winnt.sif (winn1.sif) серийный номер
rem Это работает независимо от вида записи ProductKey=XXXX или ProductKey = XXXX (с пробелами)
if defined WINNTSIF (
if %KEY% == 1 (
for /F "tokens=3 delims==] " %%j in ('find /I /N "ProductKey" %WINNTSIF%') do (
if %KEYISVISIBLE% == 1 (
echo [Support Information]>> "%OEMFILE%"
echo Line1=ProductKey: %%j>> "%OEMFILE%"
echo Line2=>> "%OEMFILE%"
set i=3
) else (
echo [OEMSpecific]>> "%OEMFILE%"
echo SerialNo=%%j>>"%OEMFILE%"
echo [Support Information]>> "%OEMFILE%"
set i=1
))
) else (
echo [Support Information]>> "%OEMFILE%"
set i=1
)
) else (
echo [Support Information]>> "%OEMFILE%"
set i=1
)

rem Дата и время инсталляции ОС в формате DD.MM.YYYY (hh:mm), например 20.05.2005 (14:37)
echo Line%i%=Installation Date and Time: %date% (%time:~0,-6%)>> "%OEMFILE%"
set /A i+=1
echo Line%i%=>> "%OEMFILE%"
set /A i+=1
echo Line%i%=Installed Components and Updates:>> "%OEMFILE%"
set /A i+=1
echo Line%i%=>> "%OEMFILE%"
set /A i+=1

rem Определение общего кол-ва файлов в каталоге апдейтов соотв-щих маске (для рус. и англ. Винды)
for /F "usebackq tokens=1" %%m in (`dir %UPDATESDIR%\%UPDATESMASK% ^| find /i "file(s)"`) do (set numfiles=%%m)
if not defined numfiles (
for /F "usebackq tokens=1" %%m in (`dir %UPDATESDIR%\%UPDATESMASK% ^| find /i "файлов"`) do (set numfiles=%%m)
)

rem вспомогательные переменные
set l=0
set c=0

rem Список апдейтов (имена всех файлов без расширений)
rem (без ключевого слова usebackq команда dir будет воспринята как
rem имя файла для подстановки в цикл FOR с последующей выдачей сообщения
rem об отсутствии такого файла в текущем каталоге).
for /F "usebackq tokens=1 delims=." %%j in (`dir /B %UPDATESDIR%\%UPDATESMASK%`) do ((set kbname=%%j) & (call :myprint))

rem Выход из этого пакетного файла.
rem Команда GOTO принимает в качестве метки перехода строку :EOF, которая вызывает
rem передачу управления в конец текущего пакетного файла. Это позволяет легко
rem выйти из пакетного файла без определения каких-либо меток. (из справки по goto)
goto :EOF

:myprint
if %c% == 0 (
set str=%kbname%
) else (
set str=%str% %kbname%
)

set /A c+=1

if %c% == %UPMAX% (
echo Line%i%=%str%>> "%OEMFILE%"
set /A i+=1
set /A l+=1
set str=
set c=0
set /A tmp=numfiles-l*UPMAX
) else (
if %numfiles% LSS %UPMAX% (
if %c% == %numfiles% (
echo Line%i%=%str%>> "%OEMFILE%"
)
)
if %tmp% LSS %UPMAX% (
if %c% == %tmp% (
echo Line%i%=%str%>> "%OEMFILE%"
)
)
)




© OSzone.net 2001-2012