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

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

Toltec 01-12-2009 15:54 1284252

Копирование, регистрация и удаление библиотек
 
Здравствуйте, подскажите пожалуйста как решить такую задачу:
Есть папка в которой лежит proga.ехе и 10 штук dll-ок (1.dll, 2.dll,...10.dll)
8 из 10 dll-ок нужно скопировать в папку "%windir%\system32" и 6 из 8-ми скопированных зарегистрировать командой regsvr32 /s 1.dll, regsvr32 /s 2.dll, и т.д.
Hо если в system32 эти библиотеки уже есть, то копировать их и регестрировать не надо.
Потом нужно запустить proga.ехе, а после закрытия программы дерегестрировать скопированные библиотеки и удалить их из system32.
Как можна реализовать такую задачу пакетным файлом?
Зарание спасибо.

Petya V4sechkin 01-12-2009 17:03 1284319

Toltec, пример для одной библиотеки:
Код:

@Echo Off
SetLocal EnableExtensions

If Not Exist %windir%\system32\1.dll (
  Copy 1.dll %windir%\system32
  Regsvr32 /s %windir%\system32\1.dll
)
Start /Wait proga.exe
If Exist %windir%\system32\1.dll (
  Regsvr32 /u /s %windir%\system32\1.dll
  Del /Q %windir%\system32\1.dll
)


Xaegr 01-12-2009 17:41 1284346

Цитата:

Цитата Petya V4sechkin
Toltec, пример для одной библиотеки »

Библиотека будет удалена после выполнения даже если она и раньше присутствовала. А ведь она может быть необходима и для других приложений. Как я понял автор хочет удалить только те библиотеки которые были добавлены.

К сожалению не возьмусь писать это на batch, но на powershell будет так:
Код:

$sourcedir = "\\server\share"
$dlls = dir $sourcedir | select -expand name | where {-not (test-path "$env:windir\system32\$_")}
$dlls | foreach {cp "$sourcedir\$_" "$env:windir\system32\$_";  regsvr32 /s "$env:windir\system32\$_"}
proga.exe | out-null
$dlls | foreach {del "$env:windir\system32\$_"}


Toltec 01-12-2009 18:06 1284363

Цитата:

Цитата Xaegr
Как я понял автор хочет удалить только те библиотеки которые были добавлены. »

Именно так и хочется, простите что не полностю прояснил задачу...
Xaegr, к сожалению с PowerShell не знаком, не знаю даже что это, но Спасибо за понимание и помощь...
Petya V4sechkin, Спасибо. Может можно сделать так, чтоб создался список скопированных библиотек, а потом по списку их дерегистрировать и удалить? Не знаю реально ли такое реализовать?

Petya V4sechkin 02-12-2009 10:48 1284899

Toltec, простейший вариант:
Код:

@Echo Off
SetLocal EnableExtensions

Set Copied_1=
If Not Exist %windir%\system32\1.dll (
  Copy 1.dll %windir%\system32
  Regsvr32 /s %windir%\system32\1.dll
  Set Copied_1=1
)
Start /Wait proga.exe
If Defined Copied_1 (
  Regsvr32 /u /s %windir%\system32\1.dll
  Del /Q %windir%\system32\1.dll
)


Toltec 02-12-2009 11:01 1284904

Petya V4sechkin, спасибо большое! Только скажите пожалуйста куда в этом скрипте прописать другие библиотеки? Я так понял это пример для одной, а для нескольких нужно написать так ? :
Код:

@Echo Off
SetLocal EnableExtensions

Set Copied_1=
If Not Exist %windir%\system32\1.dll (
  Copy 1.dll %windir%\system32
  Regsvr32 /s %windir%\system32\1.dll
  Set Copied_1=1
)
Set Copied_2=
If Not Exist %windir%\system32\2.dll (
  Copy 2.dll %windir%\system32
  Regsvr32 /s %windir%\system32\2.dll
  Set Copied_2=2
)
Start /Wait proga.exe
If Defined Copied_1 (
  Regsvr32 /u /s %windir%\system32\1.dll
  Del /Q %windir%\system32\1.dll
)
If Defined Copied_2 (
  Regsvr32 /u /s %windir%\system32\2.dll
  Del /Q %windir%\system32\2.dll
)

Простите за настойчивость, но я только начинаю изучать пакетные файлы и многого не понимаю.... Спасибо.

Petya V4sechkin 02-12-2009 11:04 1284907

Toltec, да, так нормально.

Toltec 02-12-2009 11:13 1284916

Petya V4sechkin, Спасибо огромное за помощь!!!

Toltec 07-12-2009 11:54 1288518

Здравствуйте, мне конечно не удобно еще раз переспрашивать и забирать ваше время, но последний скрипт у меня не работает...
Я сделал новый, на основе первого ответа от Petya V4sechkin, этот все делает как надо, только часть удаления хочется подправить, т.е. хочется, чтобы удалял только скопированные библиотеки...
Есть два вопроса: 1. Можно сделать так, чтобы в папке, рядом с пакетным файлом, создавался текстовый файл (1.тхт), со списком скопированных библиотек ? (Дальше я уже сам, сделаю удаление по этому списку...)

2. команда
Код:

If Not Exist %windir%\system32\1.dll (
  Copy 1.dll %windir%\system32
  Regsvr32 /s %windir%\system32\1.dll

означает: Если в папке %windir%\system32 нет библиотеки 1.dll, то скопировать 1.dll в %windir%\system32 и зарегестрировать 1.dll... а если библиотека 1.dll есть, то она все равно будет зарегистрирована или в даном случае условие (If Not Exist) отменяет и регистрацию библиотеки? Объясните мне пожалуйста, не понимаю как тут работает...

Зарание спасибо!


Время: 03:28.

Время: 03:28.
© OSzone.net 2001-