Timeout подключения к удаленному реестру.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mario
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 19.10.2005 (Ср) 13:23
Откуда: Из Новосиба

Timeout подключения к удаленному реестру.

Сообщение Mario » 03.02.2011 (Чт) 11:05

Много искал по форумам, но ни разу не натолкнулся на сабж.

Собственно есть программа которая удаленно цепляется к реестрам компьютеров в доменной сети. Если коннект есть и служба "Удаленный реестр" включена, то код отрабатывает быстро. Но проблемы начинаются когда коннекта нет или служба не запущена - очень долго опрашивает ПК. Подскажи как уменьшить время ожидания ответа от ПК.

Код: Выделить всё
    Dim lRet As Long
    'Connect to the remote registry. tS - ip pc
    lRet = RegConnectRegistry("\\" & tS, HKEY_LOCAL_MACHINE, hRemoteReg)
    If (lRet = ERROR_SUCCESS) Then
        ConToComp = True
        'MsgBox "Successfully connected to remote registry"
    Else
        'MsgBox "Error:" & Err.LastDllError
        ConToComp = False
        Exit Function
    End If


+ Подскажите что-то типа treeview, только на API
Кто пил один и втихомолку, тот век земной прожил без толку...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Timeout подключения к удаленному реестру.

Сообщение Antonariy » 03.02.2011 (Чт) 13:36

Подскажи как уменьшить время ожидания ответа от ПК.

Спросить у гугла.
Правда, сложно догадаться, о чем спрашивать?
Впрочем, сэкономлю тебе время — напрямую никак. Все решения косвенные, от пинга до проверки статуса сервиса.
Подскажите что-то типа treeview, только на API

Здесь.
Лучший способ понять что-то самому — объяснить это другому.

Mario
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 19.10.2005 (Ср) 13:23
Откуда: Из Новосиба

Re: Timeout подключения к удаленному реестру.

Сообщение Mario » 04.02.2011 (Пт) 7:04

С проблемой timeout'a я частично справился с помощью ICMP Echo.
Кто пил один и втихомолку, тот век земной прожил без толку...

Mario
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 19.10.2005 (Ср) 13:23
Откуда: Из Новосиба

Re: Timeout подключения к удаленному реестру.

Сообщение Mario » 08.02.2011 (Вт) 11:22

Еще один вопрос.

Как перечислить все ключи на удаленном реестре с параметром DigitalProductID (к примеру), если не знаешь заранее путь к ним.
Нашел код, но он написан для локального использования. Может кто знает, как переделать его.

[Хакер] :: Безобразие вырезано. Для оформления кода надо использовать тег [code], а не [quote]. Когда копируешь код из IDE, надо включать кириллическую раскладку, чтобы комментарии не портились. Исправляй.
Кто пил один и втихомолку, тот век земной прожил без толку...

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Timeout подключения к удаленному реестру.

Сообщение Vova_2581 » 08.02.2011 (Вт) 21:12

Mario писал(а):Нашел код, но он написан для локального использования. Может кто знает, как переделать его.

Используй hRemoteReg в функии рекурсивного поиска в реестре.

p.s. Включить и запустить службу удаленного реестра тоже можно, но для этого нужны админправа на каждый комп.

Mario
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 19.10.2005 (Ср) 13:23
Откуда: Из Новосиба

Re: Timeout подключения к удаленному реестру.

Сообщение Mario » 09.02.2011 (Ср) 7:53

Vova_2581 писал(а):
p.s. Включить и запустить службу удаленного реестра тоже можно, но для этого нужны админправа на каждый комп.


Админ. права имееются. Но как это сделать? )

За hRemoteReg спасибо. Я действительно не правильно передавал значения.
Кто пил один и втихомолку, тот век земной прожил без толку...

Mario
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 19.10.2005 (Ср) 13:23
Откуда: Из Новосиба

Re: Timeout подключения к удаленному реестру.

Сообщение Mario » 09.02.2011 (Ср) 8:53

Antonariy писал(а):
Mario писал(а): Подскажите что-то типа treeview, только на API

Здесь.


Как вытащить treeview из этого проекта в другой?
Кто пил один и втихомолку, тот век земной прожил без толку...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Timeout подключения к удаленному реестру.

Сообщение Antonariy » 09.02.2011 (Ср) 17:33

Добавить в референсы:
OleGuids3.tlb
COMMCTRL.tlb

Добавить в проект:
ucListView.ctl
modListView.bas
mISystem.bas
mIOleInPlaceActivate.bas
clsIPAO.bas
И ucTreeView.ctx, если хочешь иконку в панели компонентов.
Лучший способ понять что-то самому — объяснить это другому.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Timeout подключения к удаленному реестру.

Сообщение Vova_2581 » 10.02.2011 (Чт) 21:50

Mario писал(а):Админ. права имееются. Но как это сделать? )

Делается это через функцию работы с менеджером системных служб OpenSCManager, он имеет первый параметр lpMachineName в котором ты указываешь имя уделенного компа или его IP. Ну, конечно, если ты тупо подставишь IP, то доступ на удаленную машину не получишь, потому что функция возьмет учетную запись того пользователя в контексте которого она будет вызвана. Удаленный комп очень удивиться, что к нему пытается прорваться какой-то амин Vasya о котором он ничего не знает. Последствия соответствующие.. Для того чтобы явным образом авторизироваться нужно воспользоваться свойством протокола SMB. Microsoft для удобства сделал так, что один раз получив доступ с регистрацией на удаленный комп, и вся последующая работа с ним будет выполнятся под этими же правами автоматически. Вот это и есть SMB. Если интересно, почитай Wiki (Принцип работы SMB). Для авторизации берем WNetAddConnection2, естественно после того, как ты пропинговал удаленную машину, как ты это делал, и убедился, что она работает в данный момент. Подключаемся по IPC$.
Код: Выделить всё
Private Type NETRESOURCE
   dwScope As Long
   dwType As Long
   dwDisplayType As Long
   dwUsage As Long
   lpLocalName As String
   lpRemoteName As String
   lpComment As String
   lpProvider As String
End Type
Private Const CONNECT_UPDATE_PROFILE = &H0
Private Const RESOURCETYPE_ANY = &H0
Private Const NO_ERROR = 0&

Private Function NetAddConnection() As Long
Dim NetRes As NETRESOURCE
With NetRes
   .dwType = RESOURCETYPE_ANY
   .lpLocalName = "" & Chr(0)
   .lpRemoteName = "\\192.168.129.41\IPC$" & Chr(0)
End With 
StrUserName = "UserName"
StrPassword = "Password"
dwStatus = WNetAddConnection2(NetRes, StrPassword, StrUserName, CONNECT_UPDATE_PROFILE)
If dwStatus = NO_ERROR Then
  MsgBox "Выполнено!", vbInformation
Else
  MsgBox "Нет подключения", vbExclamation
End If
Exit Function     

Как только подключились, вызываем SCM, используя тоже IP или имя.
Код: Выделить всё
Const SERVICES_ACTIVE_DATABASE = "ServicesActive"
Const SC_MANAGER_CONNECT = &H1&
Dim hSCManager As Long
Dim hService As Long
StrCompName = "\\192.168.129.41"
hSCManager = OpenSCManager(StrCompName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CONNECT)

Получив хэндл hSCManager открываем сервис.
Код: Выделить всё
Const Service_Name = "RemoteRegistry" 'Служба Удаленный реестр
hService = OpenService(hSCManager, ServiceName, SERVICE_ALL_ACCESS)

После это включаем службу (по умолчанию она обычно вообще выключена) через функцию ChangeServiceConfig с параметром dwStartType= SERVICE_AUTO_START, например, или другим. Потом запускаем через функцию StartService. Вот так, примерно, получаем доступ к удаленному реестру, а потом уже можешь выполнять в нем поиск.

Mario
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 19.10.2005 (Ср) 13:23
Откуда: Из Новосиба

Re: Timeout подключения к удаленному реестру.

Сообщение Mario » 11.02.2011 (Пт) 10:08

Vova спасибо.
Вот есть еще такой скрипт.
Код: Выделить всё
Option Explicit
Dim objWMIService, objItem, objService
Dim colListOfServices, strComputer, strService, intSleep
strComputer = "*.*.*.*"
'intSleep = 15000
'WScript.Echo " Click OK, then wait " & intSleep & " milliseconds"

'On Error Resume Next
' NB strService is case sensitive.
strService = " 'RemoteRegistry' "
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where Name ="_
& strService & " ")
For Each objService in colListOfServices
objService.StopService()
WSCript.Sleep intSleep
objService.StartService()
Next
WScript.Echo "Your "& strService & " service has Started"
WScript.Quit
Кто пил один и втихомолку, тот век земной прожил без толку...

Mario
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 19.10.2005 (Ср) 13:23
Откуда: Из Новосиба

Re: Timeout подключения к удаленному реестру.

Сообщение Mario » 11.02.2011 (Пт) 10:18

Antonariy писал(а):Добавить в референсы:
OleGuids3.tlb
COMMCTRL.tlb

Добавить в проект:
ucListView.ctl
modListView.bas
mISystem.bas
mIOleInPlaceActivate.bas
clsIPAO.bas
И ucTreeView.ctx, если хочешь иконку в панели компонентов.


Привет, не нашел такой модуль по твоей ссылке - clsIPAO.bas

И еще как я понял у ucTreeView свойство public должно быть true, но его можно выставить только поменяв Project Type на ActiveX Control, что собственно мне не нужно.
Как быть? Помоги, плиз.
Кто пил один и втихомолку, тот век земной прожил без толку...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Timeout подключения к удаленному реестру.

Сообщение Денис » 11.02.2011 (Пт) 10:25

Mario писал(а):свойство public должно быть true

Зачем тебе true? Понимаешь, для чего это надо? Это надо для передачи класса из одного твоего приложения в другое твое приложение (или не в твое). В общем, экспортируемый класс. А зачем тебе экспортировать класс? Ведь ты вроде как другое программируешь.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Timeout подключения к удаленному реестру.

Сообщение Antonariy » 11.02.2011 (Пт) 10:47

Привет, не нашел такой модуль по твоей ссылке - clsIPAO.bas
Это название файла, модуль назывется clsIOleInPlaceActivate.
Лучший способ понять что-то самому — объяснить это другому.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Timeout подключения к удаленному реестру.

Сообщение Vova_2581 » 12.02.2011 (Сб) 15:01

Mario писал(а):Vova спасибо.
Вот есть еще такой скрипт.

Код: Выделить всё
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")...

Просто через WMI-моникер ты не сможешь войти на удаленный комп, если на нем запрещена нулевая сессия. Это нужно делать через объект локатора SWbemLocator.
Посмотри здесь.
К тому же, прежде чем запускать сервис objService.StartService(), тебе нужно его включить, иначе ничего не получится.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 87

    TopList