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


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 : Супер! Большое спасибо! Таким методом реально можно управлять консольными программами. Класс) Задача решилась.
Спасибо)


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