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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Как узнать из Bat-ника версию *.DLL, *.ax и т.п. (http://forum.oszone.net/showthread.php?t=89271)

Dilinjer 28-08-2007 16:45 634311

Как узнать из Bat-ника версию *.DLL, *.ax и т.п.
 
Народ, есть ли какиенить консольные тулзы позволяющие узнать версию *.dll,*.ax и т.п. ?
Например, есть зарегестрированный divxdec.ax .
1. Как узнать из батника Путь\divxdec.ax ?
2. Как узнать версию divxdec.ax ?
Хочу написать батничек, регистрирущий и копирующий в %SystemRoot%\system32 библилотеки в случае их отсутствия, иначе необходимо сравнивать версии зарегистрированной и устанавливаемой библиотек и т.д.
Возможо ли такое ?

Dilinjer 28-08-2007 17:07 634324

По поводу версии файла один из вариантов: filever.exe /v %systemroot%\\system32\divxdeс.ax
А вот как узнать путь к зарегестрированной библиотеке ?
З.Ы. filever.exe расположен: Дистрибутив Хрюши\SUPPORT\TOOLS\SUPPORT.CAB

amel27 29-08-2007 02:57 634565

Цитата:

Цитата Dilinjer
как узнать путь к зарегестрированной библиотеке ?

Код:

@echo off

SET LIB_NAME=acelpdec.ax
For /F "tokens=3" %%i In ('REG QUERY HKCR\CLSID /S^|findstr /IEC:"\\%LIB_NAME%"') Do SET LIB_PATH=%%i
Echo %LIB_PATH%

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

Dilinjer 29-08-2007 11:51 634730

amel27, я дико извеняюсь если задаю глупые вопросы, но как винда подгружает(находит) определенную библиотеку ?
Например, я кликаю мышью на фильм.avi (закодированный при помощи DivX), загружаеться плеер и декодеры(зарегестрированные библиотеки) звука и изображения (divxdec.ax), т.е. мот кто разъяснит как все это происходит ?
И еще, как тогда с помощь батничка из библиотеки GUID выцепить ?
У разных версий divxdec.ax (либо какихто других библиотек разных версий) GUID одинаковый или разный?
И еще проблема divxdec.ax может назвываться, например: divxd.ax ,т.е. отличаться от внутреннего имени файла, тогда ваш вариант не поможет (:

Busla 29-08-2007 12:15 634751

Цитата:

Цитата Dilinjer
Хочу написать батничек, регистрирущий и копирующий в %SystemRoot%\system32 библилотеки

Как показал amel27 написание подобных bat'ников весьма нетривиально. Ко всему прочему ряд консольных утилит windows не работает со стандартными потоками, т.е. бывает попросту невозможно организовать перенаправление вывода.
Для этих задач гораздо больше подходит WSH (Windows Script Host).

Dilinjer 29-08-2007 12:25 634759

Должна же быть консольная тулза, читающая GUID из библиотеки ! Если ее найти, то проблем с написанием моего батничка невозникнет....
Busla, WSH изучать ради простейшей задачи - некатит :) Хотя знание WSH - весч нужная !

amel27 29-08-2007 12:45 634775

Dilinjer
Во-первых, на один файл может быть несколько GUID... Во вторых, путь не существует отдельно от имени, отсюда и проблема - без перебора все равно не обойтись, а перевести GUID в путь и обратно можно кучей способов, например через WMI.
Цитата:

Цитата Dilinjer
как винда подгружает(находит) определенную библиотеку ?

расширение --> класс (GUID) --> путь - все в ветке HKCR
Цитата:

Цитата Dilinjer
divxdec.ax может назвываться, например: divxd.ax ,т.е. отличаться от внутреннего имени файла

не понял, "путь" он и есть "путь": http://msdn2.microsoft.com/en-us/library/ms682390.aspx

З.Ы. Проблема может быть в другом - некоторые системные библиотеки не включают полный путь для \System32, например ole32.dll, для учета этой возможности придется немного усложнить батник.

Dilinjer 29-08-2007 13:02 634794

Цитата:

Цитата amel27
расширение --> класс (GUID) --> путь - все в ветке HKCR
Цитата Dilinjer:divxdec.ax может назвываться, например: divxd.ax ,т.е. отличаться от внутреннего имени файла
не понял, "путь" он и есть "путь": http://msdn2.microsoft.com/en-us/library/ms682390.aspx

Я имел ввиду след. например: Есть зарегистрированная библиотека (декодер DivX) C:\program files\123\123.ax(тоист взяли тупо еге переименовали с divxdec.ax в 123.ax) , я незнаю(точнее bat'ник) не имени не месторосположения данной библиотеки. Имею в наличии divxdec.ax последней версии.
Так вот bat'нику надо узнать путь и имя этой библиотеки для сравнения версий и в случае наличия свежей деинсталяции старой и установки новой библиотеки?

amel27 30-08-2007 11:17 635476

Цитата:

Цитата Dilinjer
взяли тупо еге переименовали с divxdec.ax в 123.ax

В таком случае я вижу только два варианта - либо сравнивать библиотеки по GUID, либо по внутреннему имени... Первый хорош для DLL/OCX но не подходит для AX-файлов (они не имеют TLB-блока), поэтому остается только второй. К сожалению мне неизвестны CMD-утилиты, читающие эту инфу из файлов (есть старая, но она не понимает юникодовых тегов)... разве только через API пытаться.

Dilinjer 30-08-2007 13:10 635593

Цитата:

Цитата amel27
читающие эту инфу из файлов (есть старая, но она не понимает юникодовых тегов)...

Это Вы про filever.exe или есть еще какието CMD-шные тулзы?
А вообще для незаригистрированных DLL/OCX какой прогой CMD/GUI можно узнать GUID(GUID'ы) класса(классов) ?

З.Ы. Кстати, немного покопав реестр, решил что в ветви HKEY_CLASSES_ROOT\CLSID хранятся не GUID-ы зарегистрированных библиотек а GUID-ы классов зарегистрированных библиотек. Сами GUID-ы зарегистрированных библиотек храняться в в ветви HKEY_CLASSES_ROOT\TypeLib, но если библиотека имеет один класс то упоминание о ней в HKEY_CLASSES_ROOT\TypeLib отсутствует. Ктолибо могет подтвердить или опровергнуть сие ?

amel27 31-08-2007 04:34 636062

Цитата:

Цитата Dilinjer
Это Вы про filever.exe или есть еще какието CMD-шные тулзы?

VerInfo от angelfire

Цитата:

Цитата Dilinjer
для незаригистрированных DLL/OCX какой прогой CMD/GUI можно узнать GUID(GUID'ы) класса(классов) ?

есть библиотечка из комплекта VS6 TLBINF32.DLL, которая позволяет работать с блоками TLB, ТУТ лежит подробная справка по ней и вообще по теме. Пара простых примеров по ее использованию на VBS:

чтение TLB из файла:
Код:

sFileName = "C:\WINDOWS\system32\msxml3.dll"

Set oTypeLib = CreateObject("TLI.TypeLibInfo")
If IsObject(oTypeLib) Then
        oTypeLib.ContainingFile = sFileName
        WScript.Echo "TLB Name:" & vbTab & oTypeLib.Name
        WScript.Echo "TLB GUID:" & vbTab & oTypeLib.GUID
        WScript.Echo "TLB LCID:" & vbTab & oTypeLib.LCID
        WScript.Echo "TLB Ver.:" & vbTab & oTypeLib.MajorVersion & "." & oTypeLib.MinorVersion
        WScript.Echo vbCRLF & "CoClasses of Library:"
        WScript.Echo "---------"

        For Each oTypeLibInfo In oTypeLib.CoClasses
                WScript.Echo oTypeLibInfo.GUID & " : " & oTypeLibInfo.Name
        Next
End If

чтение TLB из реестра:
Код:

Lib_GUID = "{F5078F18-C551-11D3-89B9-0000F81FE221}"
Lib_LCID = "0"
Lib_MajorVer = "3"
Lib_MinorVer = "0"

Set oTypeLibApp = CreateObject("TLI.TLIApplication")
Set oTypeLib = oTypeLibApp.TypeLibInfoFromRegistry (Lib_GUID, Lib_MajorVer, Lib_MinorVer, Lib_LCID)
If IsObject(oTypeLib) Then
        WScript.Echo "TLB Name:" & vbTab & oTypeLib.Name
        WScript.Echo "TLB GUID:" & vbTab & oTypeLib.GUID
        WScript.Echo "TLB LCID:" & vbTab & oTypeLib.LCID
        WScript.Echo "TLB Ver.:" & vbTab & oTypeLib.MajorVersion & "." & oTypeLib.MinorVersion
        WScript.Echo vbCRLF & "CoClasses of Library:"
        WScript.Echo "---------"

        For Each oTypeLibInfo In oTypeLib.CoClasses
                WScript.Echo oTypeLibInfo.GUID & " : " & oTypeLibInfo.Name
        Next
End If

запуск:
Код:

cscript //NoLogo Script.vbs

Dilinjer 31-08-2007 12:44 636281

Вот, нарыл у мелкомягких прикольную GUI'шную тулзу - oleview.exe - полезный вьювер!


Время: 19:18.

Время: 19:18.
© OSzone.net 2001-