![]() |
Регистрация и разрегистрация DLL одним bat
Уважаемые, как прописать в одном bat регистрацию и разрегистрацию DLL??
т.е. при запуске проверяется зарегистрирована ли DLL, если да - разрегистрировать, если нет - зарегистрировать. |
Sisin, если известен GUID этой DLL'ки:
Код:
reg query HKCR\CLSID |>nul findstr /irc:"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"&®svr32 /u dll_name||regsvr32 dll_name |
Sisin, не вижу простого способа сделать это, равно как и просто определить — возможна ли вообще регистрация, используя только средства пакетных файлов.
|
Sisin
так как regsvr32 есть штатно на виндовых системах то имеем: Код:
@ECHO OFF |
Sisin, вам обязательно батник, или можно через контекстное меню по файлику?
Как добавить регистрацию dll в контекстное меню OCX, DLL Код:
Windows Registry Editor Version 5.00 |
y--, «regsvr32 "…" /u» даёт errorlevel 0, независимо от того, была регистрация до вызова утилиты или нет.
yurfed, он хочет то же самое, но одной строкой меню, а не двумя разными. |
Цитата:
|
Iska,
написанный код был перепроверен несколько раз... Работает. При проверки рабочести рекомендую удалить ключ "/s" |
Цитата:
|
yurfed
для наглядности отладки при проверке... |
Sisin,
может так? Код:
@echo off |
Тронул гусляр струны и понеслись девчата в пляс...
|
Цитата:
|
Цитата:
Цитата:
Скрытый текст
![]() То есть, конечным результатом Вашего кода: Код:
regsvr32 "%MY_DLL%" /u /s||regsvr32 "%MY_DLL%" /s Windows 7 x64. |
Цитата:
|
Цитата:
Прошу прощения, за мои излишние хотелки... |
Sisin,
проверил - все это чепуха, никакой разницы в реестре нет между снимком до регистрации и после или наоборот, значит определить зарегистрирован (или нет) файл нельзя, а значит и остальная петрушка до лампочки, только жесткие команды, надо регистрировать - регистрируем, или unregister. |
Iska
так трудно выполнить Код:
regsvr32 "%MY_DLL%" /u||regsvr32 "%MY_DLL%" |
y--, выполнил раз. Выполнил два. Выполнил три. И даже четыре. Внимательно почитал. Каждый раз одно и то же:
![]() и только. А у Вас? |
Iska
Запускаю отладочный скрипт "от имени администратора" такого содержания: Код:
@ECHO OFF первый запуск два всплывающих окна: ![]() и ![]() второй запуск одно окно: ![]() Далее все по циклу... |
Покажите результат исполнения под:
Цитата:
Код:
regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.9.2170\bin\comcntr.dll" /u /s && echo Errorlevel is 0 || Errorlevel NOT 0 |
Iska
выполнял такой код: Код:
regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.9.2170\bin\comcntr.dll" /u /s && echo Errorlevel is 0 ||echo Errorlevel NOT 0 Для зарегистрированной библиотеки: Код:
C:\Program Files (x86)\1cv8\8.3.9.2170\bin>regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.9.2170\bin\comcntr.dll" /u /s && echo Errorlevel is 0 || echo Errorlevel NOT 0 Код:
C:\Program Files (x86)\1cv8\8.3.9.2170\bin>regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.9.2170\bin\comcntr.dll" /u /s && echo Errorlevel is 0 || echo Errorlevel NOT 0 |
|
Iska
На Win7 поведение другое - Unreg всегда выдает успех... А так 2012 - тот же 8.1 по ядру - значит 8.0 проверять надо... |
|
Идеальный вариант для контекстного меню был бы на подобие этого скрипта
т.к в контекстном меню будет одна строка и значение её будет меняться в зависимости от результата. Только здесь пункт в меню прописан для рабочего стола и папок, а сделать как в предложенном .bat только для .dll Скрытый текст
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell") ' Если скрипт запущен с каким-то параметром, то... If WScript.Arguments.Count>0 Then ' Проверяем значение в реестре и в зависимости от него либо отображаем скрытые папки, либо наоборот убираем. If WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden") = 1 then ' Скрываем папки WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden", "0", "REG_DWORD" WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden", "2", "REG_DWORD" ' Добавляем пункт в контекстное меню ' В поле command прописываем путь до текущего скрипта с параметром (не важно каким, главное, чтобы он был), чтобы.. ' ..скрипт понял, что ему нужно не удалить ветку реестра, а изменить WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden\", "Показать скрытые файлы", "REG_SZ" WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden\command\", "WScript.exe """&WScript.ScriptFullName&""" -argument", "REG_SZ" ' Обновляем окно эксплорера, чтобы увидеть результат WSHShell.SendKeys "{F5}" Else ' Скрываем папки WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden", "1", "REG_DWORD" WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden", "1", "REG_DWORD" ' Добавляем пункт в контекстное меню WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden\", "Не показывать скрытые файлы", "REG_SZ" WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden\command\", "WScript.exe """&WScript.ScriptFullName&""" -argument", "REG_SZ" ' Обновляем окно эксплорера, чтобы увидеть результат WSHShell.SendKeys "{F5}" End If Else ' Если запись в реестре есть, то удаляем наш раздел If WSHShell.Run("cmd.exe /C REG QUERY ""HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden""", 0, True)=0 Then WSHShell.Run "cmd /C REG DELETE ""HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden"" /f", 0 Else ' Иначе запускаем этот скрипт с параметром (какой параметр - значения не имеет, главное его наличие) WSHShell.Run """"&WScript.ScriptFullName&""" -argument" ' И ещё добавим иконочку для красоты WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\SuperHidden\Icon", "%SystemRoot%\System32\shell32.dll,69", "REG_SZ" End If End if Set WSHShell = Nothing WScript.Quit(0) |
Время: 02:04. |
Время: 02:04.
© OSzone.net 2001-