PDA

Показать полную графическую версию : [решено] Пакетное копирование и регистрация .DLL и .INF


shao
29-08-2011, 03:38
Коллеги, есть две папки. В одной - .inf файлы, во второй - .dll
Нужно их скопировать в определённые директории и зарегистрировать. Все, пакетом.
Как это можно сделать используя скриптовые языки. (Желательно средствами CMD/BAT) ?

Путь для копирования:
%windir%\inf
и
%windir%\system32 соответственно...

Спасибо!

Iska
29-08-2011, 05:37
shao, поясните пожалуйста, что значит «зарегистрировать»? Про *.dll ещё понятно; наверное это:
regsvr32.exe <bla-bla-bla.dll>
(если в *.dll наличествует соответствующая функция). Или это какие-то драйвера (судя по совместному упоминанию inf-dll)?

А *.inf? К ним понятие «зарегистрировать» вроде как нельзя отнести. Речь идёт про Install?
rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 <bla-bla-bla.inf>
Про Active Install?
rundll32.exe advpack.dll,LaunchINFSection <bla-bla-bla.inf>, DefaultInstall

Дайте чуть более подробную информацию о том, что сие вообще есть.

shao
29-08-2011, 08:00
Iska, извините , пропустил в фразеНужно их скопировать в определённые директории и зарегистрировать. ».....
Нужно было так Нужно их скопировать в определённые директории инсталлировать и зарегистрировать. »
- писал полусонный (работа....). ну Вы и так всё поняли и откорректировали :)

Подробнее:
Рассмотрим вариант, где это - пакет драйверов.
DLL-ки имеют соответствующую функцию для регистрации,
а *.inf - если можно - рассмотрим два варианта: - как Вы указали.
Install и Active Install..
Папки: 0011 и 0022.
В них, соответственно 001.inf, 002.inf.....020.inf и 001.dll, 002.dll.........020.dll - если уж поподробнее.......

как регистрировать и инсталлировать через regsvr32, setupapi , advpack - понятно.
Не понятно , как это сделать пакетно. Все сразу с копированием в нужную директорию.

Ну, например :
xcopy /y "0022\*.dll" "%windir%\system32",а как зарегистрировать именно те файлы , которые были скопированы ?

SendMessage
29-08-2011, 14:10
Ну, например :
Код:
xcopy /y "0022\*.dll" "%windir%\system32"
,а как зарегистрировать именно те файлы , которые были скопированы ? »
for /f "delims=" %%a in ('xcopy /y "0022\*.dll" "%windir%\system32\" ^| findstr /i "\\.*\.dll"') do regsvr32.exe /s "%windir%\system32\%%~nxa"

SendMessage
29-08-2011, 15:49
Наверное, "%windir%\system32\%%~nxa" - лишнее. Можно просто "%%~nxa".
regsvr32 без маршрута регистрирует библиотеки именно в системной папке.

shao
29-08-2011, 18:27
SendMessage,
копируется, но не регистрируется !
Убрал " s " в " regsvr32.exe /s " - нет запроса на подтверждение регистрации.....

SendMessage
30-08-2011, 00:53
shao, не могу воспроизвести Вашу ошибку. У меня все работает.

нет запроса на подтверждение регистрации..... »
Запроса и не должно быть - только сообщение об успешной регистрации. Или же собщение о неуспешности.
Если ничего нет - значит у Вас не отрабатывает regsvr32. Попробуйте указать полный маршрут к нему.

shao
30-08-2011, 17:48
Запроса и не должно быть - только сообщение об успешной регистрации. Или же собщение о неуспешности »
Ни того, ни другого - не было !
Попробую прописать путь......

UPD:

Сделал так :
for /f "delims=" %%a in ('xcopy /y "*.dll" "%windir%\system32\" ^| findstr /i "\\.*\.dll"') do %windir%\system32\regsvr32.exe /s "%windir%\system32\%%~nxa"
Без изменений. Копируется , но не регистрируется.
Если указываю каждый файл:
regsvr32.exe /s %windir%\system32\001.dll
Тогда всё в порядке - регистрация проходит.....

El Sanchez
30-08-2011, 18:33
shao, а так:

for /f "delims=" %%a in ('xcopy /y "*.dll" "%windir%\system32\" ^| findstr /i "[.]dll$"') do %windir%\system32\regsvr32.exe /s "%windir%\system32\%%~nxa"

shao
30-08-2011, 19:14
shao, а так: »

А так - :up
Отлично, работает ! спасибо!

Ещё два вопроса пожалуйста:

1. Можете объяснить эти: ...^| findstr /i ".dll"... ^| findstr /i "\\.*\.dll"куски кода и этот: "%windir%\system32\%%~nxa"
"а" - это атрибуты ? Зачем ?

2.Install и Active Install для *.inf как реализовать ?
просто изменить в Вашем коде соответствующую команду и расширение ?

El Sanchez
30-08-2011, 20:51
Можете объяснить эти: »
shao, xcopy пишет пути (ну почти) копируемых файлов в консоль плюс сообщение о том сколько скопировано файлов. При помощи операции piping (символ | между 2 командами) мы вывод xcopy передаем не в консоль, а на вход команды findstr с регулярным выражением (фильтр). Просто ищем во выходном потоке xcopy строки, заканчивающиеся на .dll. Кстати, я исправил регулярное выражение на корректное в предыдущем сообщении.

"а" - это атрибуты ? Зачем ? »
%a - переменная, используемая в for, содержащая путь копируемого файла, т.е. то, что выдала связка xcopy|findstr, ~nx - это модификаторы переменной (выделяют имя и расширение из пути). Подробнее for /?

.Install и Active Install для *.inf как реализовать ? »
Например, Install

for /f "delims=" %%a in ('xcopy /y "*.inf" "%windir%\system32\" ^| findstr /i "[.]inf$"') do %windir%\system32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 "%windir%\system32\%%~nxa"

shao
30-08-2011, 21:52
Кстати, я исправил регулярное выражение на корректное в предыдущем сообщении. »
Я это заметил - потому и спросил , как работает код :)

Скажите , а почему в Install так:
^| findstr /i "[.]inf$" ?
А так, нельзя ?
^| findstr /i ".inf"

Iska
31-08-2011, 01:39
А так, нельзя ? »

Краткая сводка по синтаксису регулярных выражений:
. Любой символ.

$ Позиция в строке: конец строки

[x-y] Диапазон: любые символы из указанного диапазона

т.е., без скобок точка будет восприниматься не как обычный символ, а как символ шаблона, и весь шаблон «".inf"» будет совпадать с «ainf», «binf», «cinf», … «zinf», «0inf», …«9inf» и т.п. Без указания «$» — с «.infabcde», «.inffffff», «.infbla-bla-bla»




© OSzone.net 2001-2012