Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

WScript.shell + Telnet

WScript.shell + Telnet
Я
   ШримпРолл
 
06.09.16 - 16:33
Добрый день господа и дамы.
Прошу помочь в решении сей проблемы. Есть такой код:

Попытка
wshshell=Новый COMОбъект("WScript.shell");
wshshell.run("telnet 192.168.1.2 3312",2,0);
Сообщить("Команду выполнил");
Исключение
Сообщить("Не удалось по причине: "+ОписаниеОшибки());
КонецПопытки;

Вылетает с ошибкой : Ошибка при вызове метода контекста (Run): Произошла исключительная ситуация (0x80070002)

Если в место telnet ввожу ping и убираю порт или просто ввожу notepad, например, то все работает. В чем может быть дело?
 
 
   orefkov
 
1 - 06.09.16 - 16:35
errorlookup выдает что 0x80070002 - "Не удается найти указанный файл".
   Метранпаж
 
2 - 06.09.16 - 16:36
А просто из командной строки работает?
А не вин7 и выше утебя ли?
   orefkov
 
3 - 06.09.16 - 16:37
Возможно, телнета нет. Возможно, надо указать полный путь. Возможно, не хватает прав на запуск телнета. Возможно, надо запускать как
cmd.exe /c telnet ....
или
runas
   sitex
 
4 - 06.09.16 - 16:37
(0) Возможно клиентская часть telnet не установлена.
   NorthWind
 
5 - 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);
Срабатывает, но ничего не происходит. То -есть сообщение "Команду выполнил" есть, а окна открытого с телнетом нет.
   orefkov
 
8 - 06.09.16 - 17:00
ну, cmd стартует, о чем shell и говорит. А вот запустить телнет cmd не может. Права проверь. Если ты командную строку запускаешь через win+R, она запускается под админ-правами, потому и может телнет запустить. А 1С не может.
   NorthWind
 
9 - 06.09.16 - 17:01
(7) там была такая фишка, что wshell.run консольные приложения прятать умеет. Какой-то ключ у команды за это отвечает, могу даже посмотреть какой
   Метранпаж
 
10 - 06.09.16 - 17:03
(8) " Если ты командную строку запускаешь через win+R, она запускается под админ-правами"

С чего бы?
 
 Рекламное место пустует
   orefkov
 
11 - 06.09.16 - 17:07
(10)
Я нажимаю Win+R и там русским языком написано:
"Это задание будет выполнено с правами администратора".
   NorthWind
 
12 - 06.09.16 - 17:07
Set Cmd = CreateObject("WScript.Shell")
Cmd.Run "telnet.exe", 1, True    
у меня вот так простартовывает, открывает окно. Win10.
   orefkov
 
13 - 06.09.16 - 17:07
+(11)
не "выполнено", а "создано", извиняюсь.
   Метранпаж
 
14 - 06.09.16 - 17:08
(11) У меня вин7 - и такой надписи нет
   ШримпРолл
 
15 - 06.09.16 - 17:08
(9) Я действительно использую этот ключ. Но команду пинг он у меня скрывает просто свернув. А тут ничего нет. Хотя сейчас проверю, выключив вообще этот ключ.

Строку я реально через win+R открываю.
   NorthWind
 
16 - 06.09.16 - 17:09
(15) -> (12). Только что проверил.
   ШримпРолл
 
17 - 06.09.16 - 17:13
У меня (12) не стартует( 
Все та же ошибка.
Пойду права смотреть.
   orefkov
 
18 - 06.09.16 - 17:14
(14)
Всё может быть...
   Torquader
 
19 - 06.09.16 - 18:15
TelNet где лежит ?
Возможно, что он должен лежать в директории, которая прописана в пути.
Не забываем, что telnet в Windows после Xp ставится как дополнительная программа.
   ШримпРолл
 
20 - 06.09.16 - 19:01
Telnet лежал на диске С в папке system32. И это был еще один подводный камень.
Для запуска телнета помимо установки прав, пришлось перенести все его файлы в доступную папку. т.к. system32 командная строка из 1С (без прав) не видела.
Всем огромное спасибо!
С вашей помощью все получилось.
   NorthWind
 
21 - 07.09.16 - 07:48
(20) в 2012 все настолько круто с правами, что даже нельзя запускать утилиты командной строки, находящиеся по PATH?
   NorthWind
 
22 - 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 строку "привет" ?
   orefkov
 
26 - 07.09.16 - 18:56
ничего, кроме как создать временный файл с расширением cmd и с содержимым
echo привет|telnet args
и запуска этого файла - мне в голову не приходит.
Почитай справку к телнету, может он умеет из файла текст брать?
   NorthWind
 
27 - 07.09.16 - 19:04
(25) ВК какую-нибудь присмотреть для сокетов. Или свою написать. Как я понял, с произвольным сетевым взаимодействием (кроме почты и web) продукты 1С пока не особенно дружат.
   Torquader
 
28 - 07.09.16 - 20:08
(25) Телнет - консольный. Его через SendKey управлять сложно.
Можно запускать через потоки и давать команды.
   ШримпРолл
 
29 - 07.09.16 - 20:15
Большое спасибо за ваши предложенные варианты. Буду пробовать все. О результате отпишусь.
   ШримпРолл
 
30 - 07.09.16 - 20:15
(26) Где-то читал, что умеет. Проверю на практике.
   Torquader
 
31 - 07.09.16 - 20:36
Если что - вам в помощь:
https://msdn.microsoft.com/en-us/library/ateytk4a(v=vs.84).aspx
   orefkov
 
32 - 08.09.16 - 12:32
Есть еще вариант кстати запускать не через .Run, а через Exec. Тогда возвращается объект, в котором есть StdIn StdOut StdErr потоки, и в StdIn поток делать Write.
   orefkov
 
33 - 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();
 
 
   Torquader
 
34 - 08.09.16 - 21:15
(33) Ты (31) смотрел - там именно это и описано.
Хотя, согласен, некоторым нужно разжевать и проглотить.
   orefkov
 
35 - 08.09.16 - 21:20
(34)
Ясно.
ЗЫ: забавно, в (33) движок форума скушал один слэш в 'cntlm\cntlm.exe" - там два слэша, а не один.
   Torquader
 
36 - 08.09.16 - 21:53
(35) Как говорится, приятного ему аппетита - и пусть его создателю будет стыдно.
   ШримпРолл
 
37 - 09.09.16 - 11:25
Torquader и orefkov : Супер! Большое спасибо! Таким методом реально можно управлять консольными программами. Класс) Задача решилась.
Спасибо)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует