Имя: Пароль:
1C
1С v8
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
Если что - вам в помощь:
https://msdn.microsoft.com/en-us/library/ateytk4a(v=vs.84).aspx
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 : Супер! Большое спасибо! Таким методом реально можно управлять консольными программами. Класс) Задача решилась.
Спасибо)