Показать полную графическую версию : Регистрация и разрегистрация DLL одним bat
Уважаемые, как прописать в одном bat регистрацию и разрегистрацию DLL??
т.е. при запуске проверяется зарегистрирована ли DLL, если да - разрегистрировать, если нет - зарегистрировать.
greg zakharov
21-06-2017, 10:44
Sisin, если известен GUID этой DLL'ки:
reg query HKCR\CLSID |>nul findstr /irc:"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"&®svr32 /u dll_name||regsvr32 dll_name
Примерно так. Как таковых средств (по крайней мере штатных) для проверки была ли DLL зарегистрирована в системе поросту нет.
Sisin, не вижу простого способа сделать это, равно как и просто определить — возможна ли вообще регистрация, используя только средства пакетных файлов.
Sisin
так как regsvr32 есть штатно на виндовых системах то имеем:@ECHO OFF
SET "MY_DLL=mydll.dll"
regsvr32 "%MY_DLL%" /u /s||regsvr32 "%MY_DLL%" /sа смысла проверять состояние нет - проще его переключить на противоположное ;)
Sisin, вам обязательно батник, или можно через контекстное меню по файлику?
Как добавить регистрацию dll в контекстное меню (http://www.regedit.su/-hkeyclassesroot/51--hkeyclassesroot/348----dll----)
OCX, DLL
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\dllfile\Shell]
[HKEY_CLASSES_ROOT\dllfile\Shell\Регистрация]
[HKEY_CLASSES_ROOT\dllfile\Shell\Регистрация\command]
@="regsvr32.exe \"%1\""
[HKEY_CLASSES_ROOT\dllfile\Shell\Отмена регистрации]
[HKEY_CLASSES_ROOT\dllfile\Shell\Отмена регистрации\command]
@="regsvr32.exe /u \"%1\""
[HKEY_CLASSES_ROOT\ocxfile\Shell]
[HKEY_CLASSES_ROOT\ocxfile\Shell\Регистрация]
[HKEY_CLASSES_ROOT\ocxfile\Shell\Регистрация\command]
@="regsvr32.exe \"%1\""
y--, «regsvr32 "…" /u» даёт errorlevel 0, независимо от того, была регистрация до вызова утилиты или нет.
yurfed, он хочет то же самое, но одной строкой меню, а не двумя разными.
он хочет »Ну пусть хочет, пока не помогут :)
Iska,
написанный код был перепроверен несколько раз... Работает. При проверки рабочести рекомендую удалить ключ "/s"
рекомендую удалить ключ "/s" »Зачем? Тихий режим, без вопросов.
yurfed
для наглядности отладки при проверке...
Sisin,
может так?
@echo off
set "sPath=%SystemRoot%\System32\regsvr32.exe"
::if not "%Processor_Architecture%"=="x86" set "sPath=%systemRoot%\SysWoW64\regsvr32.exe"
set "xDLL=C:\Windows\system32\ntshrui.dll"
call :prov "%xDll%"
pause& exit
:prov
reg query "HKEY_CLASSES_ROOT\CLSID" /s /f "InprocServer32" /k /ve|>nul find /i "%~nx1" && (
echo Зарегистрирована [%sPath% /u "%xDll%"]
) || (
echo Не зарегистрирована [%sPath% "%xDll%"]
)
exit /b
greg zakharov
21-06-2017, 12:41
Тронул гусляр струны и понеслись девчата в пляс...
может так? »
Я же должен свою dll только тут вписать: set "xDLL=XXX.dll"????
написанный код был перепроверен несколько раз... Работает. »
для наглядности отладки при проверке... »
У меня — так:
http://i.imgur.com/Io3rKy2.png
То есть, конечным результатом Вашего кода:
regsvr32 "%MY_DLL%" /u /s||regsvr32 "%MY_DLL%" /s
всегда будет отмена регистрации библиотеки, зарегистрировать её никогда не получится.
Windows 7 x64.
только тут вписать: set "xDLL= »
да, с полным путем к ней
да, с полным путем к ней »
А как сделать с неполным? (т.е. dll лежат в папке с bat) И чтобы не одна dll, а две регистрировались/разрегистрировались??
Прошу прощения, за мои излишние хотелки...
Sisin,
проверил - все это чепуха, никакой разницы в реестре нет между снимком до регистрации и после или наоборот, значит определить зарегистрирован (или нет) файл нельзя, а значит и остальная петрушка до лампочки, только жесткие команды, надо регистрировать - регистрируем, или unregister.
Iska
так трудно выполнитьregsvr32 "%MY_DLL%" /u||regsvr32 "%MY_DLL%"три раза подряд для одной и той же DLL? И внимательно почитать результаты выполнения в графических окошках...
y--, выполнил раз. Выполнил два. Выполнил три. И даже четыре. Внимательно почитал. Каждый раз одно и то же:
http://i.imgur.com/rFSbKnf.png
и только. А у Вас?
Iska
Запускаю отладочный скрипт "от имени администратора" такого содержания:
@ECHO OFF
SET "MY_DLL=C:\Program Files (x86)\1cv8\8.3.9.2170\bin\comcntr.dll"
regsvr32 "%MY_DLL%" /u||regsvr32 "%MY_DLL%"
ось - Win2012 R2, начальное состояние библиотеки - зарегистрирована
первый запуск два всплывающих окна:
http://i12.pixs.ru:/thumbs/3/3/8/1png_6791563_26604338.jpg (http://pixs.ru/showimage/1png_6791563_26604338.png)
и
http://i12.pixs.ru:/thumbs/3/3/9/2png_7685792_26604339.jpg (http://pixs.ru/showimage/2png_7685792_26604339.png)
второй запуск одно окно:
http://i12.pixs.ru:/thumbs/3/4/0/3png_7945081_26604340.jpg (http://pixs.ru/showimage/3png_7945081_26604340.png)
Далее все по циклу...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.