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

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

xsxPeguckAxsx 13-03-2011 19:11 1634011

Копирование capicom.dll и ее регистрация
 
Доброго всем времени суток!

Собственно на работе потребовалась необходимость в локальной сети на более чем 230 машин разослать и зарегистрировать capicom.dll.
Для осуществления поставленной задачи был написан скрипт.
Может кому понадобиться, пользуйтесь)))

читать дальше »
Код:

'~~~~~~~~~~~~~~~~~~~~Объявление переменных~~~~~~~~~~~~~~~~
' *** переменные ***
Dim boolRegistr: boolRegistr = True                                                                        ' - для проверки регистрации dll
Dim cmdCode: cmdCode = "regsvr32 /s "                                                                ' - это команда в командной строке regsvr32 /s
Dim strSrvPatch: strSrvPatch = "путь до файла на сервере\capicom.dll"              ' - сетевой путь до capicom.dll
Dim strLocalPatch                                                                                              ' - локальный путь до capicom.dll
Dim sysDir                                                                                                        ' - определение папки WINDOWS

' *** объекты ***
Set sysShell = WScript.CreateObject("WScript.Shell")                                                ' - объект нахождения папки WINDOWS
Set shellCmd = CreateObject("WScript.Shell")                                                        ' - объект выполнения команды в командной строке


'~~~~~~~~~~~~~~~~~~~~Выполнение тела скрипта~~~~~~~~~~~~~~~~
' *** определение папки WINDOWS ***
sysDir = sysShell.ExpandEnvironmentStrings("%windir%")
wscript.echo "Системная папка - " & sysDir

' *** указание полного локального пути ***
strLocalPatch = sysDir & "\system32\capicom.dll"

' *** копирование файла с сервера на ПК ***
copyFile strSrvPatch, strLocalPatch

' *** зарегистрирован ли dll в системе? ***
If RegistryExists("HKCR", "CLSID\{03ACC284-B757-4B8F-9951-86E600D2CD06}","InprocServer32") = True Then
    boolRegistr = True
    wscript.echo "Dll зарегистрирована, работа скрипта будет завершена"
        wscript.quit
Else
    boolRegistr = False
    wscript.echo "Dll не зарегистрирована, будет произведена его регистрация в системе"
End If

' *** если dll не зарегистрирована, выполнить команду в консоли ***
If boolRegistr = False Then
    intDebug = shellCmd.Run(cmdCode & strLocalPatch, 1, True)
   
    If intDebug = 0 Then
        wscript.echo "Регистрация " & strLocalPatch & " успешно завершена"
    Else
        wscript.echo strLocalPatch & " не зарегистрирован"
    End If
End If

' *** обнуление всех переменных ***
Set sysShell = Nothing
Set shellCmd = Nothing

'~~~~~~~~~~~~~~~~~~~~Описание функций~~~~~~~~~~~~~~~~
' *** функция проверки регистрации dll ***
Function RegistryExists(LNGHKEY, strKey, strSubkey)

Dim reg, aSubkeys, s, hkroot
Const HKLM = &H80000002
Const HKCR = &H80000000
Const HKCU = &H80000001
Const HKUSERS = &H80000003
RegistryExists = False
   
If LNGHKEY = "HKLM" Then hkroot = HKLM
If LNGHKEY = "HKCU" Then hkroot = HKCU
If LNGHKEY = "HKCR" Then hkroot = HKCR
If LNGHKEY = "HKUSERS" Then hkroot = HKUSERS
   
Set reg = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
    reg.EnumKey hkroot, strKey, aSubkeys
            If Not IsNull(aSubkeys) Then
                For Each s In aSubkeys
                    If LCase(s) = LCase(strSubkey) Then
                        RegistryExists = True
                        Exit Function
                    End If
                Next
            End If
Set reg = Nothing
End Function

' *** функция копирования с сервера dll на ПК ***
Function copyFile(fileNameFrom, fileNameTo)

Dim fso1: Set fso1 = CreateObject("Scripting.FileSystemObject")
Dim fso2: Set fso2 = CreateObject("Scripting.FileSystemObject")
Dim file1
Dim file2

If fso1.fileexists(fileNameFrom) Then
        Set file1 = fso1.getfile(fileNameFrom)
            If Not fso2.fileexists(fileNameTo) Then
                wscript.echo fileNameTo & " не существует, копирование разрешено"
                    file1.copy (fileNameTo)
                copyFile = True
                    wscript.echo "копирование успешно завершено"
                    Else
                                wscript.echo filenameto & "уже есть в системе, копирование отменено"
                                copyFile = False
        End If
Else
        wscript.echo "на сервере файла " & fileNameFrom & " не существует, завершение работы"
        copyFile = False
        wscript.quit
End If

Set fso1 = Nothing
Set fso2 = Nothing
End Function


Iska 13-03-2011 20:35 1634067

xsxPeguckAxsx, что мешало просто развернуть через групповую политику Platform SDK Redistributable: CAPICOM?

Два объекта FSO:
Код:

Dim fso1: Set fso1 = CreateObject("Scripting.FileSystemObject")
Dim fso2: Set fso2 = CreateObject("Scripting.FileSystemObject")

излишне.

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

xsxPeguckAxsx 14-03-2011 00:07 1634246

Спасибо за советы.

Цитата:

Цитата Iska
что мешало просто развернуть через групповую политику Platform SDK Redistributable: CAPICOM? »

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

sov44 22-10-2014 11:59 2418750

Подскажите, как проверить, зарегистрировалась ли библиотека х32 *.dll в windows 7x64 или нет?
После запуска команды выходит сообщение, что регистрация dll успешная, однако ни в regdllview ни в regdllview-x64 библиотеку не вижу.
Код:

%windir%\SysWOW64\regsvr32.exe "путь\name.dll"
п.с. не в той теме запостил. :)

Iska 22-10-2014 12:40 2418787

Цитата:

Цитата sov44
Подскажите, как проверить, зарегистрировалась ли библиотека х32 *.dll в windows 7x64 или нет? »

Попробовать создать объект из-под клиента Automation той же разрядности, что и библиотека, обрабатывая возможную ошибку создания.

sov44 22-10-2014 13:21 2418810

Цитата:

Цитата Iska
Попробовать создать объект из-под клиента Automation той же разрядности, что и библиотека »

Немного не понятно. ;)
Вроде сделал и запостил результат http://forum.oszone.net/post-2418807-69.html

Iska 22-10-2014 14:44 2418859

Цитата:

Цитата sov44
Немного не понятно. »

На примере последнего кода из vbscript: вычисление хэша MD5 строки — Серый форум:
Код:

Option Explicit

Const CAPICOM_HASH_ALGORITHM_MD5 =      3

Dim strText
Dim objHashedData


strText = "Мама мыла раму."

On Error Resume Next

Set objHashedData = WScript.CreateObject("CAPICOM.HashedData")

If Err.Number <> 0 Then
        Err.Clear
        On Error Goto 0
       
        WScript.Echo "Can't create object [CAPICOM.HashedData]."
        WScript.Quit 1
End If

On Error Goto 0


With objHashedData
    .Algorithm = CAPICOM_HASH_ALGORITHM_MD5
    .Hash UStr2BStr(strText)
   
    WScript.Echo "String:  [" & strText & "]"
    WScript.Echo "MD5 Hash: [" & .Value & "]"
End With

Set objHashedData = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
' Based on «md5test.vbs.txt» (http://www.daleanderson.ca/code/wsh/md5test%2Evbs.txt)
'
' Unicode string to Byte string conversion
'=============================================================================
Function UStr2BStr(strText)
    Dim i
    Dim strResult
   
   
    strResult = ""
   
    For i = 1 To Len(strText)
        strResult = strResult & ChrB(Asc(Mid(strText, i, 1)))
    Next
   
    UStr2BStr = strResult
End Function
'=============================================================================

Можете сравнить с исходным, чтобы увидеть отличия.

brunomann 04-04-2018 09:17 2806928

Здравствуйте, уважаемые участники форума ( http://forum.oszone.net/ ) Очень прошу, если у кого есть - кто-нибудь, пожалуйста, выложите на Вашем сервере (или где-нибудь на свободном файлообменнике) следующие очень старые SDK от Microsoft (и дайте ссылки на них), в Итернете ИХ (#1, #2, #3, #4, #5, #6, #7, #8), и #9) НИГДЕ НЕВОЗМОЖНО НАЙТИ(!!!) (все ссылки или битые-мертвые или ложные
НУЖНЫ ИМЕННО ВСЕ ЭТИ SDK:

----------------------------------------
#1) Microsoft Win32 Software Development Kit 4.0 (v4.0)
----------------------------------------
#2) Microsoft Platform SDK April 1999 (1999-04) (Last Platform SDK to officially install on Windows 95)
----------------------------------------
#3) Microsoft Platform SDK September 1999 (1999-09) (Last Platform SDK to fully support Visual C++ 5.0 (Visual C++ 5.0 announced Feb. 11, 1997, was available on March 19, 1997))
----------------------------------------
#4) Microsoft Platform SDK February 2001 (2001-02)
(The Microsoft Platform SDK, February 2001 Edition, was the last to ship redistributable components as an integral part of the SDK.)
----------------------------------------
#5) Microsoft Platform SDK June 2001 (2001-06)
Last Platform SDK to officially develop for Windows 95. (Does not officially install on Windows 95)
----------------------------------------
#6) Microsoft Platform SDK August 2001 5.1.2601.0 (2001-08) Last Platform SDK to unofficially develop for Windows 95. (Does not officially install on Windows 95)
----------------------------------------
#7) Microsoft Platform SDK November 2001 5.2.3590.2 (2001-11)
----------------------------------------
#8) Microsoft Platform SDK May 2002 5.2.3639.1 (2002-05)
----------------------------------------
#9) Microsoft Platform SDK July 2002 5.2.3663.0 (2002-07)
----------------------------------------

жду с терпением и заранее БОЛЬШОЕ СПАСИБО!
С уважением Bruno Mann.
P.S.
все ссылки в Internet или битые-мертвые или ложные:(
извините, если не в ту тему написал, подскажите если есть тема по очень старым SDK...


Время: 00:48.

Время: 00:48.
© OSzone.net 2001-