1 (изменено: daszip, 2012-07-17 03:12:54)

Тема: VBScript: Получение строки запуска

Имеется следующий скрипт.

        Set WshShell = CreateObject("WScript.Shell")
        Set Locator = CreateObject("WbemScripting.SWbemLocator")
        
        Set ServicesSet = Locator.ConnectServer(".")
        Set WshScriptExec = WshShell.Exec("rundll32.exe kernel32,Sleep")
        
        Set ParentProc = ServicesSet.Get("Win32_Process.Handle="&WshScriptExec.ProcessID)
        ParentProcID = ParentProc.ParentProcessID
        WshScriptExec.Terminate()  
        
        Set ParentProc = ServicesSet.Get("Win32_Process.Handle="&ParentProcID)
        
        CmdStr = RTrim(ParentProc.CommandLine)
        WScript.Echo CmdStr

Проблема в том, что 100 лет в обед как работало, и вдруг перестало.
На рабочем хосте не работает, на любой другой работает.
Стартую от админа, выдаёт ошибку.

Error: Отказано в доступе
Code: 80041003
Source: SWbemServicesEx

Подозреваю, что проблема в системе, но реинсталл крайне нежелателен.
Комрады, кто что посоветует?

2

Re: VBScript: Получение строки запуска

Если кратко, то...

        Set Locator = CreateObject("WbemScripting.SWbemLocator")
        Set ServicesSet = Locator.ConnectServer(".")
        Set ParentProc = ServicesSet.Get("Win32_Process.Handle=1")

Ошибка на 3 строке.

3

Re: VBScript: Получение строки запуска

Set ParentProc = ServicesSet.Get("Win32_Process.Handle='" & CStr(WshScriptExec.ProcessID) & "'")
Set ParentProc = ServicesSet.Get("Win32_Process.Handle='" & CStr(ParentProcID) & "'")

А чем Вас не устраивает коллекция «WScript.Arguments»?

4 (изменено: daszip, 2012-07-17 10:15:38)

Re: VBScript: Получение строки запуска

А чем мне она поможет? Я использую код в 1с. Какие там WScript.Arguments могут быть?
Вообщем-то проблемы мои кроются в глубоко в системе, сама подсистема WMI файлово в порядке, но похоже кто-то до меня правил что-то в правах DCOM.

5

Re: VBScript: Получение строки запуска

daszip пишет:

А чем мне она поможет? Я использую код в 1с. Какие там WScript.Arguments могут быть?

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

daszip пишет:

Вообщем-то проблемы мои кроются в глубоко в системе, сама подсистема WMI файлово в порядке, но похоже кто-то до меня правил что-то в правах DCOM.

Как определили?

6

Re: VBScript: Получение строки запуска

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

В моём случае особой разницы от среды исполнения нет. 1с-ка просто молча закрывается, wscript выдаёт попап с ошибкой.

Как определили?

Как бы есть средства http://technet.microsoft.com/ru-ru/scriptcenter/dd772288 там есть ссылка на WMI Diagnosis Utility (v2.0). Утилька генерит портянку, в которой есть информация что изменены права на DCOM компоненты.

7

Re: VBScript: Получение строки запуска

daszip пишет:

В моём случае особой разницы от среды исполнения нет. 1с-ка просто молча закрывается, wscript выдаёт попап с ошибкой.

Первейшим условием для определения является возможность воспроизведения ситуации. Именно потому нужна наиболее полная и подробная информация. Тогда можно разбираться и пробовать. А иначе приходится просто строить предположения.

Вы так и не сказали, как именно Вы из 1С исполняете скрипт.

daszip пишет:

Как бы есть средства http://technet.microsoft.com/ru-ru/scriptcenter/dd772288 там есть ссылка на WMI Diagnosis Utility (v2.0). Утилька генерит портянку, в которой есть информация что изменены права на DCOM компоненты.

Спасибо, ясно. Наличие изменённых (по сравнению с умолчальными) прав ещё не говорит об ошибке. В ряде случаев сама Microsoft требует делать сие для обеспечения работоспособности того или иного функционала Wbem. Надо смотреть конкретику.

8

Re: VBScript: Получение строки запуска

Вы так и не сказали, как именно Вы из 1С исполняете скрипт.

        WshShell = СоздатьОбъект("WScript.Shell");
        Locator = СоздатьОбъект("WbemScripting.SWbemLocator");
        
        ServicesSet = Locator.ConnectServer(".");
        WshScriptExec = WshShell.Exec("rundll32.exe kernel32,Sleep");
        
        ДочернийПроцесс = ServicesSet.Get("Win32_Process.Handle="+WshScriptExec.ProcessID);
        РодительскийПроцессИД = ДочернийПроцесс.ParentProcessID;
        WshScriptExec.Terminate();  
        
        РодительскийПроцесс = ServicesSet.Get("Win32_Process.Handle="+РодительскийПроцессИД);
        
        СтрокаЗапуска = СокрЛП(РодительскийПроцесс.CommandLine);

9

Re: VBScript: Получение строки запуска

daszip, спасибо, ясно.

Ошибка возникает здесь:

ДочернийПроцесс = ServicesSet.Get("Win32_Process.Handle="+WshScriptExec.ProcessID);

или здесь:

РодительскийПроцесс = ServicesSet.Get("Win32_Process.Handle="+РодительскийПроцессИД);

?

10

Re: VBScript: Получение строки запуска

пуск - панель управления - администрирование - управление компьютером - службы и приложения - управляющий элемент вми - пкм - свойства - безопасность - ...

Я конечно далек от мысли... (с)