Ошибка при вызове метода контекста run

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

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

Спасибо)

ОС: Windows x86 Microsoft Windows 2003 version 5.2 Service Pack 2 (Build 3790)
Платформа: 8.3.8.1964
Конфигурация: ()
Режим БД: клиент-серверный
Приложение: Обычное приложение 32б
Режим совместимости: Версия8_2_16
Инструменты разработчика: Портативные 4.08p

Попал на такую ошибку, при выполнении запроса:
{ВнешняяОбработка.ирПлатформа.МодульОбъекта(6117)}: Ошибка при вызове метода контекста (Run)
WshShell.Run(СтрокаЗапуска, 0, ОжидатьЗавершения);
по причине:
Произошла исключительная ситуация (0x80070002)

Ситуация вот в чем. Работаю удаленно на клиентском сервере — права ессно порезаны. Из-за этого сначала не мог пользоваться отложенной отладкой, т.к. ИР у меня в сессии клиента, а суперпользователь 1С в него писать не может. Потом осенило — расшарил папку с ир, стал писать путь к ИР для отложенной отладки через «//». При этом дал на папку все права для everyone. Получилось. Собрать данные для запроса получилось, а вот выполнить его — нет.. Несмотря на то, что контекст отладки был получен через сетевой путь, сам запрос почему-то открывается по локальному адресу. Т.е. в заголовке консоли запросов я вижу не «//..<Путь к папке ИР>», а «C:\Documents and settings..<локальный путь к папке ИР>».

Добавлено (21.05.2017, 11:39)
———————————————
Сохранил запрос как внешний, открываю через сетевой путь, он мне опять такую же ошибку. Зашел в отладчик — а там в рун все-равно с рабочего стола запускает…

Добавлено (21.05.2017, 11:46)
———————————————
Судя по всему ИР при запуске использует метод «ИспользуемоеИмяФайла», от которого и строит все остальные пути.. Можно ли сделать настройку для переопределения этого параметра?

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

Closed

Templlg opened this issue

May 13, 2023

· 2 comments

Labels

question

Further information is requested

Comments

@Templlg

Надеюсь в тот раздел )
В серверной и файловой базе не запускается клиент тестирования.
К серверу подключаюсь по RDP
Галочка у пользователя «Защита от опасных действий» снята

Укажите:

  1. Версия Vanessa Automation — 1.2.040.15
  2. Версия платформы — 1С:Предприятие 8.3 (8.3.22.1750)
  3. Режим совместимости базы, где запускается Vanessa Automation — Версия 8.3.17
  4. Операционная система — windows server 2016

Конфигурация на сервере 1С:ERP Управление предприятием 2 (2.5.10.93) тонкий клиент
Конфигурация файловая база IRP (2021.43.2644) тонкий клиент


> Прикладывайте файлы скриншотов
![2023-05-13_19-52-00](https://github.com/Pr-Mex/vanessa-automation/assets/119128603/a683ea9a-21c0-41c2-9927-f2187a8e2add)

Сообщение об ошибке  13.05.2023 17:47:56 {ВнешняяОбработка.VanessaAutomation.Форма.ОбщегоНазначенияVA.Форма(642)}: Ошибка при вызове метода контекста (Run): Произошла исключительная ситуация (0xffffffff)

@Templlg
Templlg

changed the title
Не запускается клиент тестирования. «Ошибка при вызове метода контекста (Run)

Не запускается клиент тестирования. «Ошибка при вызове метода контекста (Run)»

May 13, 2023

@Pr-Mex

@Templlg
Если запустить 1С под правами администратора — проблема останется?

@Templlg

@Templlg Если запустить 1С под правами администратора — проблема останется?

Добавили права, все запустилось. Спасибо

Labels

question

Further information is requested

2 participants

@Pr-Mex

@Templlg

ropsa

0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

1

1C 8.x

Оповещения активных пользователей

28.06.2016, 11:07. Показов 7084. Ответов 13

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте! Необходимо оповещать пользователей, например о прекращении работы программы. Было найдено решение:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сообщение="";
    Если ВвестиСтроку(Сообщение,"Сообщение:") Тогда  
        Попытка
            Shell=Новый COMОбъект("WScript.Shell");
            Если ИмяКомпьютера<>"" Тогда
                Shell.Run("net send "+ИмяКомпьютера+" "+Сообщение,0,0);
            Иначе  
                Отправленные=Новый Массив;
                ЭтотКомпьютер=ПолучитьИмяКомпьютера();
                Для Каждого Стр Из СписокПользователей Цикл
                    Если (Стр.ИмяКомпьютера<>"") И (Стр.ИмяКомпьютера<>ЭтотКомпьютер) И (Отправленные.Найти(Стр.ИмяКомпьютера)=Неопределено) Тогда
                        Shell.Run("net send "+Стр.ИмяКомпьютера+" "+Сообщение,0,0);
                        Отправленные.Добавить(Стр.ИмяКомпьютера);
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;

Но как выяснилось, «net send» не работает для Windows 7. Подскажите, как можно исправить, чтобы работало на Windows 7 или возможно есть какие-нибудь другие способы оповещения. Заранее спасибо!!



0



Модератор

Эксперт 1С

3744 / 2932 / 581

Регистрация: 10.03.2011

Сообщений: 11,539

Записей в блоге: 1

28.06.2016, 12:48

2



0



0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

28.06.2016, 14:00

 [ТС]

3

попробовала заменить «net send » на «msg » но ничего в 1с не получилось. Если пробовать отправку сообщений через командную строку, то отправляется только самой себе



0



Модератор

Эксперт 1С

3744 / 2932 / 581

Регистрация: 10.03.2011

Сообщений: 11,539

Записей в блоге: 1

28.06.2016, 15:36

4

ropsa, может доступа к сеансам нет? Ошибка то какая?

Добавлено через 2 минуты
ropsa, Не отсылаются сообщения командой msg



0



207 / 181 / 31

Регистрация: 24.10.2011

Сообщений: 743

28.06.2016, 15:39

5

msg работает исключительно с правами админа.



0



0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

28.06.2016, 16:03

 [ТС]

6

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



0



Модератор

Эксперт 1С

3744 / 2932 / 581

Регистрация: 10.03.2011

Сообщений: 11,539

Записей в блоге: 1

28.06.2016, 17:43

7

Цитата
Сообщение от ropsa
Посмотреть сообщение

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

Команда для run «не съедобная»



0



0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

29.06.2016, 08:28

 [ТС]

8

Это как-то можно исправить?



0



Модератор

Эксперт 1С

3744 / 2932 / 581

Регистрация: 10.03.2011

Сообщений: 11,539

Записей в блоге: 1

29.06.2016, 20:56

9

Цитата
Сообщение от ropsa
Посмотреть сообщение

Это как-то можно исправить?

да проверить работоспособность команды вне 1С



0



0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

30.06.2016, 09:27

 [ТС]

10

отправляется только самой себе, но из 1с даже себе не могу отправить



0



Dethmontt

Модератор

Эксперт 1С

3744 / 2932 / 581

Регистрация: 10.03.2011

Сообщений: 11,539

Записей в блоге: 1

30.06.2016, 13:41

11

ropsa, я не знаю что вы там проверяете, все отлично работает

1C
1
2
3
4
5
6
7
8
    Сообщение= "Привет!";
    Команда = "msg /server:"+ИмяКомпьютера()+" * """+Сообщение+"""";
    Попытка
        Shell=Новый COMОбъект("WScript.Shell");
        Shell.Run(Команда,0,0);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

Добавлено через 1 минуту

Цитата
Сообщение от ropsa
Посмотреть сообщение

отправляется только самой себе

Запускаться msg должен с правами АДМИНА, только АДМИН может отправлять ВСЕМ

тут все написано, читайте внимательнее

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

ropsa, cmd msg

Не отсылаются сообщения командой msg



2



0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

30.06.2016, 13:49

 [ТС]

12

Даже взяла и скопировала ваш код, но у меня все та же ошибка…

Добавлено через 52 секунды
Да вроде посмотрела, что у меня права админа, но еще поточнее посмотрю, может и правда все дело в этом



0



Модератор

Эксперт 1С

3744 / 2932 / 581

Регистрация: 10.03.2011

Сообщений: 11,539

Записей в блоге: 1

30.06.2016, 13:51

13

ropsa, замените в команде звездочку * на имя сеанса (имя пользователя)



2



0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

30.06.2016, 13:53

 [ТС]

14

Спасибо большое!!!



0



Вот тут чувак еще один способ предложил: «В итоге я понял, что нормальной реализации с помощью языка 1С нету, так как в большинстве случаев используется подключение Wscript.Wshell, и видимо не просто так. Но использовать первый вариант я совершенно не хотел, из за записи файла на диск.

У меня был небольшой опыт работы c VBScript, поэтому я знал, что в скрипт можно переадавать параметры. Этим я и воспользовался. Был написан простой скрипт ожидания, который принимал один параметр:

wscript.sleep wscript.arguments(0)

Сделать это очень просто: открываем блокнот, вставляем строчку , которая написана выше, жмем «Сохранить как…», и сохраням как sleep.vbs.

Этот файл необходимо положить на сервер(для вызова на сервере) и на клиент(для вызова на клиенте), в моём случае(сервер терминалов), я положил файл на оба сервера(терминальный и на сервер 1С).

Теперь у нас есть скрипт который будет ждать столько, сколько мы скажем, осталось его вызвать из программы.

Вызов происходит в две строчки кода:

Я положил процедуру в общий модуль на клиенте, и в общий модуль на сервере, так же в параметр задал ПутьХраненияФайла. Вот таким образом с помощью Wscript, без постоянного создания файлов скрипта можно реализовать паузу в работе кода с минимальным значением ~0,001 секунда.

Процедура ОбработкаОжидания(Секунда)

scr = Новый COMОбъект("WScript.Shell");

scr.Run("Wscript.exe ""C:\temp\sleep.vbs"" "+секунда*1000,0,1);

КонецПроцедуры[/pre]

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста rows
  • Ошибка получения заявления ведомством на госуслугах что это
  • Ошибка плагин недоступен яндекс
  • Ошибка при вызове конструктора описаниетипов
  • Ошибка при вызове метода контекста range 1с