Тема: VBS запускается от 32-битного родительского потока, на x64. Реестр x3
Добрый день.
Есть скрипт. распрастраняется по Sccm, и получается что родительский поток запускается от x32, и получает значение ветки реестра x32 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
Нужно что бы получил доступ к ветке реестра x64 HKEY_LOCAL_MACHINE\SOFTWARE\ , т.к. в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node нет нужных значений.
Rem AutoCAD Fonts
rem Option Explicit
on error resume Next
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003 'HKEY_USERS
Const ForWriting = 2
Const ForAppending=8
Const Create = True
Const Modal = True
Const TimeOut1 = "0"
Const TimeOut2 = "5"
Const OverwriteExisting = True
Const EVENT_SUCCESS=0
Const EVENT_ERROR=1
Const EVENT_WARNING=2
Const EVENT_INFORMATION=4
Rem ----------------------------------------------------------------------------------------------
' путь к логам
strLogPath = "\\server\LOGS\APP\Autodesk\Fonts\"
strValueName = "ProductName"
strAcadLocation = "Location"
dim strLogMessage 'содержит текст протокола установки
Dim objShell
dim objWMIService
dim oRegistry
dim WshNetwork
dim objFSO
dim filename
strComputer="."
strLogMessage = ""
Set objShell = CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\CIMV2")
Set oRegistry=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
Set WshNetwork = CreateObject("WScript.Network")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Rem Проверяем наличие входного параметра
strAction = ""
Set objArgs = WScript.Arguments
If WScript.Arguments.Count > 0 Then
strAction = UCase(Trim(WScript.Arguments(0)))
End If
Rem +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Rem Открываем лог
Rem +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
strFileLogName = strLogPath & WshNetwork.ComputerName & ".log"
Rem Выполняем поиск в реестре записи о приложении
strKeyPath = "SOFTWARE\Autodesk\AutoCAD"
Err.clear
Rem ----- Проверка Есть ли раздел---------------------------
Err.clear
value = objShell.RegRead("HKLM\SOFTWARE\Autodesk\")
if err.number <> 0 then
rem MSGBOX "Нет раздела HKLM\SOFTWARE\Autodesk\"
else
rem MSGBOX "Есть раздел"
Set objFileLog = objFSO.OpenTextFile(strFileLogName, ForAppending, True )
rem --- Если есть то создаем лог------
if err.number<>0 then
MSGBOX "Не удалось создать файл с протоколом " & strFileLogName & ": " & err.description
wscript.Quit(-1)
End If
writelog vbcrlf
writelog "********************"
writelog Now
writelog "********************"
writelog "Копирование шрифтов в AutoCAD и DWG trueview Ищем Папки"
strWorkingDir = objShell.CurrentDirectory
strFontPath=strWorkingDir&"\fonts"
rem MSGBOX strWorkingDir
writelog "Папка с шрифтами " & strFontPath
strKeyPathTru="SOFTWARE\Autodesk\AutoCAD"
FindANDCopyFont (strKeyPathTru)
strKeyPathTru="SOFTWARE\Autodesk\DWG TrueView"
FindANDCopyFont (strKeyPathTru)
end if
Set objWMIService = Nothing
WScript.Quit
rem ================================== Основа =========================================================
sub FindANDCopyFont (strKeyPath)
oRegistry.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
rem +++++++++++++ Ищем Все ключи реестра в разделе ++++++++++++++++
For Each subkey In arrSubKeys
key = strKeyPath & "\" & subkey
oRegistry.EnumKey HKEY_LOCAL_MACHINE, key, arrSubKeys1
For Each subkey1 In arrSubKeys1
key1=key & "\" & subkey1
writelog vbTab & key1
strValueNameValue=""
strAcadLocationeValue=""
oRegistry.GetStringValue HKEY_LOCAL_MACHINE,key1,strValueName,strValueNameValue
oRegistry.GetStringValue HKEY_LOCAL_MACHINE,key1,strAcadLocation,strAcadLocationeValue
rem определяем путь шрифтов
if strValueNameValue <>"" then
strAcadLocationeValue=strAcadLocationeValue&"\Fonts"
writelog vbTab & strValueNameValue & vbtab & strAcadLocationeValue
Set objFolder = objFSO.GetFolder(strFontPath)
Set colFiles = objFolder.Files
rem ------------ Проверка есть ли в папке шрифт или нет и его копирование -------------------------------
For Each objFile in colFiles
filename=strAcadLocationeValue & "\" & objFile.Name
if (objFSO.FileExists(filename)) Then
writelog vbTab & objFile.Name &" Файл существует в папке " & filename
else
writelog vbTab & "Файл не существует копируем в " & filename
objFSO.CopyFile (strFontPath & "\" & objFile.Name) , strAcadLocationeValue &"\" , OverwriteExisting
end if
Next
end if
next
Next
end sub
rem ===================================================================================================
Rem +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Rem _____________________Запись логов__________________________________________________________________
Function writelog(byval strMessage)
on error resume Next
' WScript.echo strMessage
' Exit Function
err.clear
objFileLog.WriteLine strMessage
if err.number<>0 then
msgbox err.description
end if
End Function
Rem ___________________Конец Запись логов______________________________________________________________
Rem +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
