Имя: Пароль:
1C
 
Бэкап 1с82 серверный вариант в *.dt скриптом
0 Andryuha83
 
14.12.10
11:49
Данный скрипт хорошо отрабатывал на редакции УПП 1.2 платформы 8.1
Сейчас обновил базу на редакцию 1.3 платформу 8.2 и скрипт перестал работать, не могу понять почему.. HKEY_CLASSES_ROOT\CLSID\{5CD98F13-1050-4b43-84F2-33AD97CFC287} написал новое для 82. Порт кластера указал новый 1641. v82.COMConnector написал. Что может быть не так?
Помогите пожалуйста разобраться.
Скрипт vbs:

 DumpPath = "\\fiesta\BackUp"
 FileName = "buhBackUpD"
 ServerName = "fiesta"  
 InfoBaseName = "buh"
 ClasterPortNumber = 1641

 InfoBasesAdminName = "Юзер"
 InfoBasesAdminPass = "2912"

 ClasterAdminName = ""
 ClasterAdminPass = ""

 LockPermissionCode = "2192" ' Код блокировки базы
 LockMessageText = vbCrLf + "БАЗА ЗАКРЫТА НА СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ!" + vbCrLf + " ВРЕМЯ ОЖИДАНИЯ ОКОЛО 5-10 МИНУТ."
 LockPermissionCode = "2192" ' Код блокировки базы

 ClasterAdminName = ""
 ClasterAdminPass = ""

 FindInfoBase = False 'Флаг, что ИБ найдена

 Set WshShell = CreateObject("WScript.Shell")
 PrgDirx86 = WshShell.RegRead("HKEY_CLASSES_ROOT\CLSID\{5CD98F13-1050-4b43-84F2-33AD97CFC287}\LocalServer32\")

 strNow = Now()
 FullPathName = DumpPath & "\" & _
            Right("0" & Day(strNow), 2) & "_" & Right("0" & Month(strNow), 2) & "_" + Right(Year(strNow), 2) & "_" &_  
            FileName & ".dt"

 If InStr(FullPathName, " ") <> 0 Then
   FullPathName = Chr(34) + FullPathName + Chr(34)
 End If
 
 Set ComConnector = CreateObject("v82.COMConnector")
 Set ServerAgent = ComConnector.ConnectAgent(ServerName)
 
' Массив кластеров
 Clasters = ServerAgent.GetClusters()
' кластер
 For Each Claster In Clasters
   If Claster.MainPort = ClasterPortNumber Then
     ServerAgent.Authenticate Claster, ClasterAdminName, ClasterAdminPass
     ' Получаем список рабочих процессов
     WorkingProcesses = ServerAgent.GetWorkingProcesses(Claster)
     For Each WorkingProcess In WorkingProcesses
       If WorkingProcess.Running = 1 Then
         ' Для каждого рабочего процесса создаем соединение с рабочим процессом
         Set connecttoworkprocess = ComConnector.ConnectWorkingProcess("tcp://" + WorkingProcess.HostName + ":" + CStr(WorkingProcess.MainPort))
         connecttoworkprocess.AuthenticateAdmin ClasterAdminName, ClasterAdminPass
         connecttoworkprocess.AddAuthentication InfoBasesAdminName, InfoBasesAdminPass
         If Not FindInfoBase Then
           ' Получаем список ИБ рабочего процесса
           InfoBases = connecttoworkprocess.GetInfoBases()
           For Each InfoBase In InfoBases
             ' Ищем нужную базу
             If UCase(InfoBase.Name) = UCase(InfoBaseName) Then
               FindInfoBase = True
               Exit For
             End If
           Next

           If Not FindInfoBase Then ' Не нашли нужную базу
             Exit For
           End If
     
           InfoBase.ConnectDenied = True
           InfoBase.DeniedFrom = CStr(Now())
           InfoBase.DeniedTo = CStr(Now() + 1/300)
           InfoBase.DeniedMessage = LockMessageText
           InfoBase.PermissionCode = LockPermissionCode

           connecttoworkprocess.UpdateInfoBase (InfoBase)

         End If

         If FindInfoBase Then
           Connections = connecttoworkprocess.GetInfoBaseConnections(InfoBase)
           For Each Connection In Connections              
             If Connection.AppId <> "SrvrConsole" Then
               connecttoworkprocess.Disconnect (Connection)
             End If
           Next
       
           LineExe = """" + PrgDirx86 + """ CONFIG /S" + ServerName + "\" + InfoBaseName + _
                     " /N" + InfoBasesAdminName + " /P" + InfoBasesAdminPass + _
                     " /UC" + LockPermissionCode + " /DisableStartupMessages /DumpIB" + FullPathName

           WshShell.Run LineExe, 5, True
         'InfoBase.ConnectDenied = False
       'connecttoworkprocess.UpdateInfoBase (InfoBase)

         End If      
       End If
     Next
   End If
 Next

 ComConnector = Null
 ServerAgent = Null
 Clasters = Null
 WorkingProcesses = Null
 connecttoworkprocess = Null
 InfoBases = Null
 InfoBase = Null
 Connections = Null
1 КМ155
 
14.12.10
11:53
(0) Debug.print PrgDirx86
2 ромарио
 
14.12.10
12:06
какая ошибка?
3 Andryuha83
 
14.12.10
14:07
Вообще ничего не выдавал... висел wscript.exe просто и все.
Поменял строчку
ServerName = "fiesta:1640"
Теперь в базу входит, конфигуратор открывается, а потом сразу закрывается, ничего не делая(
4 ромарио
 
14.12.10
14:19
может надо fiesta:1641,
а вообще как-нибудь содержимое lineexe в файл выведи, и пробуй из командной строки позапускать с разными параметрами
5 Andryuha83
 
14.12.10
14:23
(4) не, 1640 все правильно. Он же заходит теперь в 1с-ку.
Процесс выгрузки не идет.
6 Andryuha83
 
14.12.10
17:20
как можно lineexe вывести в файл?
пытался явным образом прописать его, не получается, не могу разобраться в кавычках(
7 Andryuha83
 
14.12.10
18:17
Запускается, но выходит окно запуска, когда нажмешь кнопку конфигуратор, то фоново заходит и выгружает.
Значит дело просто где-то в кавычках.. что же лишнее?..

LineExe = """C:\Program Files (x86)\1cv82\8.2.12.78\bin\1cv8.exe"" CONFIG /S ""fiesta:1641""\""buh""  /N ""Юзер"" /P ""2912"" /UC ""2192"" /DisableStartupMessages /DumpIB ""C:\BackUp\1CArchive\1c.dt"""
8 Andryuha83
 
15.12.10
14:35
Дело было не в кавычках)

 DumpPath = "\\fiesta\BackUp"
 FileName = "buhBackUpD"
 ServerName = "fiesta:1640"  
 ServerName2 = "fiesta:1641"  
 InfoBaseName = "buh"
 ClasterPortNumber = 1641

 InfoBasesAdminName = "Юзер"
 InfoBasesAdminPass = "2912"

 ClasterAdminName = ""
 ClasterAdminPass = ""

 LockPermissionCode = "2192" ' Код блокировки базы
 LockMessageText = vbCrLf + "БАЗА ЗАКРЫТА НА СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ!" + vbCrLf + " ВРЕМЯ ОЖИДАНИЯ ОКОЛО 5-10 МИНУТ."
 LockPermissionCode = "2192"

 ClasterAdminName = ""
 ClasterAdminPass = ""

 FindInfoBase = False 'Флаг, что ИБ найдена

 Set WshShell = CreateObject("WScript.Shell")
 PrgDirx86 = WshShell.RegRead("HKEY_CLASSES_ROOT\CLSID\{5CD98F13-1050-4b43-84F2-33AD97CFC287}\LocalServer32\")

 strNow = Now()
 FullPathName = DumpPath & "\" & _
            Right("0" & Day(strNow), 2) & "_" & Right("0" & Month(strNow), 2) & "_" + Right(Year(strNow), 2) & "_" &_  
            FileName & ".dt"

 If InStr(FullPathName, " ") <> 0 Then
   FullPathName =FullPathName
 End If
 
 Set ComConnector = CreateObject("v82.COMConnector")
 Set ServerAgent = ComConnector.ConnectAgent(ServerName)
 
' Массив кластеров
 Clasters = ServerAgent.GetClusters()
' кластер
 For Each Claster In Clasters
   If Claster.MainPort = ClasterPortNumber Then
     ServerAgent.Authenticate Claster, ClasterAdminName, ClasterAdminPass
     ' Получаем список рабочих процессов
     WorkingProcesses = ServerAgent.GetWorkingProcesses(Claster)
     For Each WorkingProcess In WorkingProcesses
       If WorkingProcess.Running = 1 Then
         ' Для каждого рабочего процесса создаем соединение с рабочим процессом
         Set connecttoworkprocess = ComConnector.ConnectWorkingProcess("tcp://" + WorkingProcess.HostName + ":" + CStr(WorkingProcess.MainPort))
         connecttoworkprocess.AuthenticateAdmin ClasterAdminName, ClasterAdminPass
         connecttoworkprocess.AddAuthentication InfoBasesAdminName, InfoBasesAdminPass
         If Not FindInfoBase Then
           ' Получаем список ИБ рабочего процесса
           InfoBases = connecttoworkprocess.GetInfoBases()
           For Each InfoBase In InfoBases
             ' Ищем нужную базу
             If UCase(InfoBase.Name) = UCase(InfoBaseName) Then
               FindInfoBase = True
               Exit For
             End If
           Next

           If Not FindInfoBase Then ' Не нашли нужную базу
             Exit For
           End If
     
           InfoBase.ConnectDenied = True
           InfoBase.DeniedFrom = CStr(Now())
           InfoBase.DeniedTo = CStr(Now() + 1/300)
           InfoBase.DeniedMessage = LockMessageText
           InfoBase.PermissionCode = LockPermissionCode

           connecttoworkprocess.UpdateInfoBase (InfoBase)

         End If

         If FindInfoBase Then
           Connections = connecttoworkprocess.GetInfoBaseConnections(InfoBase)
           For Each Connection In Connections              
             If Connection.AppId <> "SrvrConsole" Then
               connecttoworkprocess.Disconnect (Connection)
             End If
           Next

   LineExe = """" + PrgDirx86 + """ CONFIG /S" + ServerName2 + "\" + InfoBaseName + _
                     " /N" + InfoBasesAdminName + " /P" + InfoBasesAdminPass + _
                     " /UC" + LockPermissionCode + " /DisableStartupMessages /DumpIB" + FullPathName

           WshShell.Run LineExe, 5, True
 
         'InfoBase.ConnectDenied = False
       'connecttoworkprocess.UpdateInfoBase (InfoBase)

         End If      
       End If
     Next
   End If
 Next

 ComConnector = Null
 ServerAgent = Null
 Clasters = Null
 WorkingProcesses = Null
 connecttoworkprocess = Null
 InfoBases = Null
 InfoBase = Null
 Connections = Null