1 (изменено: dab00, 2011-08-20 18:56:56)

Тема: HTA: Управление USB-устройстами хранения информации

Приглашаю принять участие в разработке и тестировании HTML-приложения для управления USB-устройствами хранения информации.
USBMaster 2.0 beta1.

2 (изменено: Евген, 2011-07-15 13:37:26)

Re: HTA: Управление USB-устройстами хранения информации

objReg.EnumKey HKLM, strSys, arrSubKeys'получаем подразделы HKEY_LOCAL_MACHINE\SYSTEM
    For Each subkey In arrSubKeys

Да, так действительно есть косяки при таком перечислении ключей реестра, я обошёл этот "косяк" вот так...

objReg.EnumKey HKLM, strSys, arrSubKeys'получаем подразделы HKEY_LOCAL_MACHINE\SYSTEM
    For i=0 In UBound(arrSubKeys)

Так будет корректно (без пропусков и сбоев) перебирать все значения...

P/S.: Причину не знаю тоже, просто знаю как это обойти...

Времени не хватает... :-(

3 (изменено: dab00, 2011-07-15 16:45:56)

Re: HTA: Управление USB-устройстами хранения информации

Так там вроде дальше проверка:

If Len(strSubkey) Then DelSubkeys objReg, HKLM, strKey & "\" & strSubkey

А то бывает пустую строку возвращает.
Или не в этом месте - файл del.lib, строка 94
Да и перед For Each проверка (тот же файл, строка 91):

If IsArray(arrSubKeys) Then

Где вылетело? Расскажите, пожалуйста, буду исправлять.
Может по коллекции кошернее от 0, а не For Each...
Проверил, у меня на XP скрипт отработал нормально. Евген, это совет? Правильнее For i = 0 To ?

4 (изменено: Евген, 2011-07-15 16:58:06)

Re: HTA: Управление USB-устройстами хранения информации

Нигде не вылетело...
я и не проверял...
я по своему опыту говорю, что если используешь For Each вместе с EnumKey, то точно будут глюки в перечислении ключей, поэтому вместе с EnumKey надо использовать For var=0 to UBound(arrKeys).
Вот только в этом случае будет обеспечено правильное и полное перечисление всех ключей...

Этот глюк выявился при тестах на ~2500 компах... !!!   ВОТ ЭТО СТАТИСТИКА !!!

Времени не хватает... :-(

5 (изменено: dab00, 2011-07-15 17:23:07)

Re: HTA: Управление USB-устройстами хранения информации

Евген пишет:

если используешь For Each вместе с EnumKey, то точно будут глюки в перечислении ключей, поэтому вместе с EnumKey надо использовать For var=0 to UBound(arrKeys).

Спасибо Евген, принял
Статистика впечатляет. А я по-стариковски, For Each...
На самом деле меня интересует работа по сети - нет в данный момент под рукой сетки потестить:
- работает ли подключение к WMI
- копируются ли файлы по сети на админскую шару через fso - типа fso.CopyFile "\\Имя_Компа\Admin$\Имя_Файла, или надо мапить обязательно

6

Re: HTA: Управление USB-устройстами хранения информации

OFF:

Евген пишет:

Этот глюк выявился при тестах на ~2500 компах... !!!

Какой глюк? Чем он вызывается, определили?

7

Re: HTA: Управление USB-устройстами хранения информации

alexii пишет:

Какой глюк? Чем он вызывается, определили?

В постах выше всё описано...

Времени не хватает... :-(

8

Re: HTA: Управление USB-устройстами хранения информации

В постах выше всё описано...

Где? Не вижу. Равно не вижу разницы:

Option Explicit

Const HKEY_LOCAL_MACHINE = &H80000002


Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx

Dim arrSubKeys, elem
Dim i


strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\default")
Set objSWbemObjectEx   = objSWbemServicesEx.Get("StdRegProv")

WScript.Echo "=========================================="

If objSWbemObjectEx.EnumKey(HKEY_LOCAL_MACHINE, "SYSTEM", arrSubKeys) = 0 Then
    For Each elem In arrSubKeys
        WScript.Echo elem
    Next
Else
    WScript.Echo "Error for enumerating subkeys [HKEY_LOCAL_MACHINE\SYSTEM]"
End If

WScript.Echo "=========================================="

If objSWbemObjectEx.EnumKey(HKEY_LOCAL_MACHINE, "SYSTEM", arrSubKeys) = 0 Then
    For i = LBound(arrSubKeys) To UBound(arrSubKeys)
        WScript.Echo arrSubKeys(i)
    Next
Else
    WScript.Echo "Error for enumerating subkeys [HKEY_LOCAL_MACHINE\SYSTEM]"
End If

WScript.Echo "=========================================="

Set objSWbemObjectEx   = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

WScript.Quit 0
==========================================
ControlSet001
ControlSet003
LastKnownGoodRecovery
MountedDevices
Select
Setup
WPA
CurrentControlSet
==========================================
ControlSet001
ControlSet003
LastKnownGoodRecovery
MountedDevices
Select
Setup
WPA
CurrentControlSet
==========================================

Если про это:

objReg.EnumKey HKLM, keyUSB, arrSubKeysUSB
If IsArray(arrSubKeysUSB) Then 
For Each subkeyUSB In arrSubKeysUSB

то ведь проверять нужно, что возвращает метод «EnumKey()».

9

Re: HTA: Управление USB-устройстами хранения информации

то ведь проверять нужно, что возвращает метод «EnumKey()».

Полагаю уважаемый Евген столкнулся именно с вопросом проверки
Понравился Ваш вариант:

If objSWbemObjectEx.EnumKey(HKEY_LOCAL_MACHINE, "SYSTEM", arrSubKeys) = 0 Then

Как говорится, дешево и сердито . Читайте мануал Вкуснее, проще чем у меня. Хотя Вы проверяете как отработал метод, а не что он возвращает.
Уважаемый Dmitrii оказал помощь (на другом форуме) в вопросе работы с ACL, у него в коде обратил внимание проверка: If Not IsEmpty
Пробовал, не покатило. У меня If IsArray - вроде работает, мануал читал - массив должен метод возвращать.

Уважаемые форумчане, кто пробовал приладу, может расскажете? Интересуют все те же два вопроса:
- работает ли подключение к WMI удаленного компа
- копируются ли файлы по сети на админскую шару через fso - типа fso.CopyFile "\\Имя_Компа\Admin$\Имя_Файла, или надо мапить обязательно

10

Re: HTA: Управление USB-устройстами хранения информации

dab00 пишет:

- копируются ли файлы по сети на админскую шару через fso - типа fso.CopyFile "\\Имя_Компа\Admin$\Имя_Файла, или надо мапить обязательно

Данный скрипт не проверял, но вообще копироваться должно.

11

Re: HTA: Управление USB-устройстами хранения информации

dab00 пишет:

Полагаю уважаемый Евген столкнулся именно с вопросом проверки

Нет...
я в процессе работы столкнулся с вопросом инвентаризации установленного софта, и при использовании For Each перечисление веточек проходило не стабильно, т.е. бывало некоторые веточки почему-то пропускались, некоторые дважды попадались в перечислении...   вообщем стабильности не было...

пока я не стал использовать For var=0 to Ubound(arrKeys)...

вот я с чем столкнулся...

Времени не хватает... :-(

12

Re: HTA: Управление USB-устройстами хранения информации

Евген, спасибо, ясно. Сам я никогда с подобным поведением не сталкивался.

13

Re: HTA: Управление USB-устройстами хранения информации

alexii пишет:

Данный скрипт не проверял, но вообще копироваться должно.

Так я понимаю, что должно, но бывают же варианты

alexii пишет:

Евген, спасибо, ясно. Сам я никогда с подобным поведением не сталкивался.

Такая же ерунда

14

Re: HTA: Управление USB-устройстами хранения информации

dab00 пишет:
alexii пишет:

Евген, спасибо, ясно. Сам я никогда с подобным поведением не сталкивался.

Такая же ерунда

Секундочку...
вот ссылка http://da440dil.narod.ru/scripts.html
Вот цитата...

Здесь следует сделать оговорку. С рекурсивной процедурой бывают косяки: иногда objReg.EnumKey не может прочитать имя раздела - вместо имени читает пустую строку и по ходу рекурсии происходит переполнение памяти. В таком случае не спасает вариант:

wshShell.Run "reg.exe delete " & Chr(34) & "имя_раздела или имя_родительского_раздела" & Chr(34) & " /f"

Только последовательное удаление подразделов - ручками - либо через редактор реестра, либо через консоль.
Если честно - не понял почему так происходит. Смотришь через regedit - все нормуль - ключи как ключи, ничего особенного. А objReg.EnumKey не читает. Кто знает причину - пожалуйста, сообщите. Буду очень рад

А говорите что не сталкивались...

Времени не хватает... :-(

15

Re: HTA: Управление USB-устройстами хранения информации

Евген пишет:

А говорите что не сталкивались...

Здесь причина в кэше. После перезагрузки такие ключи читаются и удаляются без проблем.

16

Re: HTA: Управление USB-устройстами хранения информации

Евген, а Вы правы
Сегодня почему-то приложение стало неправильно считать количество флешек.
Оказалось, что на одном из циклов EnumKey выдает не массив.
Заменил For Each на For i=0 To UBound - и заработало!!! Не понимаю почему...

17

Re: HTA: Управление USB-устройстами хранения информации

dab00 пишет:

Не понимаю почему...

Вот и я говорю - For Each - ГЛЮЧИТ !!!

Времени не хватает... :-(

18

Re: HTA: Управление USB-устройстами хранения информации

Евген пишет:

Вот и я говорю - For Each - ГЛЮЧИТ !!!

А я так любил его...

19

Re: HTA: Управление USB-устройстами хранения информации

Хотел реализовать запуск от имени - не получилось.
Нарисовал такой скриптик:

Set objShellApp = CreateObject("Shell.Application")
Set wshShell = CreateObject("WScript.Shell")
    
objShellApp.ShellExecute "mshta.exe" , Chr(34) & wshShell.CurrentDirectory & "\" & "usbmaster.hta" & Chr(34), "", "runas",1

Set wshShell = Nothing
Set objShellApp = Nothing

Не подключается к CIMV2 - пишет ошибка 2147024891.
Думаю потому, что к локальному к WMI от имени нельзя. Жаль...