|   |   | 
| 
 | WScript.shell + Telnet | ☑ | ||
|---|---|---|---|---|
| 0
    
        ШримпРолл 06.09.16✎ 16:33 | 
        Добрый день господа и дамы.
 Прошу помочь в решении сей проблемы. Есть такой код: Попытка wshshell=Новый COMОбъект("WScript.shell"); wshshell.run("telnet 192.168.1.2 3312",2,0); Сообщить("Команду выполнил"); Исключение Сообщить("Не удалось по причине: "+ОписаниеОшибки()); КонецПопытки; Вылетает с ошибкой : Ошибка при вызове метода контекста (Run): Произошла исключительная ситуация (0x80070002) Если в место telnet ввожу ping и убираю порт или просто ввожу notepad, например, то все работает. В чем может быть дело? | |||
| 1
    
        orefkov 06.09.16✎ 16:35 | 
        errorlookup выдает что 0x80070002 - "Не удается найти указанный файл".     | |||
| 2
    
        Метранпаж 06.09.16✎ 16:36 | 
        А просто из командной строки работает?
 А не вин7 и выше утебя ли? | |||
| 3
    
        orefkov 06.09.16✎ 16:37 | 
        Возможно, телнета нет. Возможно, надо указать полный путь. Возможно, не хватает прав на запуск телнета. Возможно, надо запускать как
 cmd.exe /c telnet .... или runas | |||
| 4
    
        sitex naïve 06.09.16✎ 16:37 | 
        (0) Возможно клиентская часть telnet не установлена.     | |||
| 5
    
        NorthWind 06.09.16✎ 16:38 | 
        (0) телнетика по умолчанию в виндах нет, ставить надо     | |||
| 6
    
        ШримпРолл 06.09.16✎ 16:46 | 
        Винда -Windows Server2012
 Телнета не было, но подключил. Из командной строки работает. (3) - Сейчас проверю. | |||
| 7
    
        ШримпРолл 06.09.16✎ 16:54 | 
        Весьма странно.
 wshshell.run("cmd.exe /c telnet 192.168.1.2 3312",2,0); Срабатывает, но ничего не происходит. То -есть сообщение "Команду выполнил" есть, а окна открытого с телнетом нет. | |||
| 8
    
        orefkov 06.09.16✎ 17:00 | 
        ну, cmd стартует, о чем shell и говорит. А вот запустить телнет cmd не может. Права проверь. Если ты командную строку запускаешь через win+R, она запускается под админ-правами, потому и может телнет запустить. А 1С не может.     | |||
| 9
    
        NorthWind 06.09.16✎ 17:01 | 
        (7) там была такая фишка, что wshell.run консольные приложения прятать умеет. Какой-то ключ у команды за это отвечает, могу даже посмотреть какой     | |||
| 10
    
        Метранпаж 06.09.16✎ 17:03 | 
        (8) " Если ты командную строку запускаешь через win+R, она запускается под админ-правами"
 С чего бы? | |||
| 11
    
        orefkov 06.09.16✎ 17:07 | 
        (10)
 Я нажимаю Win+R и там русским языком написано: "Это задание будет выполнено с правами администратора". | |||
| 12
    
        NorthWind 06.09.16✎ 17:07 | 
        Set Cmd = CreateObject("WScript.Shell")
 Cmd.Run "telnet.exe", 1, True у меня вот так простартовывает, открывает окно. Win10. | |||
| 13
    
        orefkov 06.09.16✎ 17:07 | 
        +(11)
 не "выполнено", а "создано", извиняюсь. | |||
| 14
    
        Метранпаж 06.09.16✎ 17:08 | 
        (11) У меня вин7 - и такой надписи нет     | |||
| 15
    
        ШримпРолл 06.09.16✎ 17:08 | 
        (9) Я действительно использую этот ключ. Но команду пинг он у меня скрывает просто свернув. А тут ничего нет. Хотя сейчас проверю, выключив вообще этот ключ.
 Строку я реально через win+R открываю. | |||
| 16
    
        NorthWind 06.09.16✎ 17:09 | 
        (15) -> (12). Только что проверил.     | |||
| 17
    
        ШримпРолл 06.09.16✎ 17:13 | 
        У меня (12) не стартует( 
 Все та же ошибка. Пойду права смотреть. | |||
| 18
    
        orefkov 06.09.16✎ 17:14 | 
        (14)
 Всё может быть... | |||
| 19
    
        Torquader 06.09.16✎ 18:15 | 
        TelNet где лежит ?
 Возможно, что он должен лежать в директории, которая прописана в пути. Не забываем, что telnet в Windows после Xp ставится как дополнительная программа. | |||
| 20
    
        ШримпРолл 06.09.16✎ 19:01 | 
        Telnet лежал на диске С в папке system32. И это был еще один подводный камень.
 Для запуска телнета помимо установки прав, пришлось перенести все его файлы в доступную папку. т.к. system32 командная строка из 1С (без прав) не видела. Всем огромное спасибо! С вашей помощью все получилось. | |||
| 21
    
        NorthWind 07.09.16✎ 07:48 | 
        (20) в 2012 все настолько круто с правами, что даже нельзя запускать утилиты командной строки, находящиеся по PATH?     | |||
| 22
    
        NorthWind 07.09.16✎ 07:49 | 
        вроде даже в никсах под обычным пользователем телнетом по умолчанию можно пользоваться спокойно...     | |||
| 23
    
        ШримпРолл 07.09.16✎ 18:10 | 
        (21) Видимо настолько.
 А я пришел к новому тупику. Я запускал telnet и командами типа: wshshell.SendKeys("сообщенька"); засылал различные сообщеньки. Но обнаружил, что при смене раскладки клавиатуры ничего не работает. То-есть SendKeys эмулирует нажатие на кнопку и чувствительна к раскладке. Как это можно обойти? Знает кто-нибудь? | |||
| 24
    
        ШримпРолл 07.09.16✎ 18:15 | 
        Реально вообще адекватно управлять телнетиной из 1С?     | |||
| 25
    
        ШримпРолл 07.09.16✎ 18:21 | 
        Или подскажите, как можно передать на определенный порт сервера простые строки?
 Например, отправить на 192.168.1.2 3312 строку "привет" ? | |||
| 26
    
        orefkov 07.09.16✎ 18:56 | 
        ничего, кроме как создать временный файл с расширением cmd и с содержимым
 echo привет|telnet args и запуска этого файла - мне в голову не приходит. Почитай справку к телнету, может он умеет из файла текст брать? | |||
| 27
    
        NorthWind 07.09.16✎ 19:04 | 
        (25) ВК какую-нибудь присмотреть для сокетов. Или свою написать. Как я понял, с произвольным сетевым взаимодействием (кроме почты и web) продукты 1С пока не особенно дружат.     | |||
| 28
    
        Torquader 07.09.16✎ 20:08 | 
        (25) Телнет - консольный. Его через SendKey управлять сложно.
 Можно запускать через потоки и давать команды. | |||
| 29
    
        ШримпРолл 07.09.16✎ 20:15 | 
        Большое спасибо за ваши предложенные варианты. Буду пробовать все. О результате отпишусь.     | |||
| 30
    
        ШримпРолл 07.09.16✎ 20:15 | 
        (26) Где-то читал, что умеет. Проверю на практике.     | |||
| 31
    
        Torquader 07.09.16✎ 20:36 | ||||
| 32
    
        orefkov 08.09.16✎ 12:32 | 
        Есть еще вариант кстати запускать не через .Run, а через Exec. Тогда возвращается объект, в котором есть StdIn StdOut StdErr потоки, и в StdIn поток делать Write.     | |||
| 33
    
        orefkov 08.09.16✎ 12:35 | 
        +(32)
 Вот так я запускал одну консольную прогу, которой надо было потом ввести пароль и прочитать вывод: var run = '"' + myFolder + 'cntlm\cntlm.exe" -c "' + pathToCntlmIni + '" -I -M ' + remoteUrl + ' -u "' + proxyUser + '" ' + proxyAddress; var exec = wsh.Exec(run); exec.StdIn.Write(proxyPass + '\n'); var out = exec.StdOut; var text = ''; while(!out.atEndOfStream) text += out.ReadAll(); | |||
| 34
    
        Torquader 08.09.16✎ 21:15 | 
        (33) Ты (31) смотрел - там именно это и описано.
 Хотя, согласен, некоторым нужно разжевать и проглотить. | |||
| 35
    
        orefkov 08.09.16✎ 21:20 | 
        (34)
 Ясно. ЗЫ: забавно, в (33) движок форума скушал один слэш в 'cntlm\cntlm.exe" - там два слэша, а не один. | |||
| 36
    
        Torquader 08.09.16✎ 21:53 | 
        (35) Как говорится, приятного ему аппетита - и пусть его создателю будет стыдно.     | |||
| 37
    
        ШримпРолл 09.09.16✎ 11:25 | 
        Torquader и orefkov : Супер! Большое спасибо! Таким методом реально можно управлять консольными программами. Класс) Задача решилась.
 Спасибо) | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |