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

   ШримпРолл

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

   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 + ‘cntlmcntlm.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) движок форума скушал один слэш в ‘cntlmcntlm.exe» — там два слэша, а не один.

   Torquader

36 — 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)
———————————————
Судя по всему ИР при запуске использует метод «ИспользуемоеИмяФайла», от которого и строит все остальные пути.. Можно ли сделать настройку для переопределения этого параметра?

Доброго дня. Пытаюсь запустить стандартный просмотрщик Windows b из 1с код такой : WshShell = Новый COMОбъект(«WScript.Shell»);     WshShell.Run («»»C:WINDOWSsystem32
undll32.exe C:WINDOWSSystem32shimgvw.dll,ImageView_Fullscreen C:ФоноваяПечатьДля АХО 2.jpg»»»,0) — выдает ошибка при вызове контекста RUN  : Произошла исключительная ситуация (0x80070002) Причем командная строка из выполнить отрабатывает !!! что может быть подскажите…

неупотребление команды системы может быть. да точно

нажми ктрл+ф1 и отчётливо произнеси в него «команда». дальше по обстоятельствам

Не удается найти указанный файл. (0x80070002)

6) вроде нет : тестирую пока в файловой

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Вот тут чувак еще один способ предложил: «В итоге я понял, что нормальной реализации с помощью языка 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:tempsleep.vbs"" "+секунда*1000,0,1);

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

С этой распространенной проблемой сталкиваются многие пользователи Windows 10, Windows 8 и Windows 7. Речь идет об ошибке с кодом 0x80070002, который указывает на отсутствие нужных файлов или их повреждении при загрузке обновления, успешно при этом установленного. Да, звучит не вполне логично, но это Windows.

Ошибка в Windows

♥ ПО ТЕМЕ: Зависает компьютер на Windows? Горячие клавиши, которые помогут решить проблему.

Когда вы работаете на компьютере и думаете, что все нормально, на экране вдруг может появиться сообщение об ошибке с кодом 0x80070002. Давайте попробуем разобраться, как можно наилучшим способом исправить эту проблему в Windows 10, Windows 8 и Windows 7.

♥ ПО ТЕМЕ: Как очистить кэш DNS на компьютере Windows, Mac и зачем это нужно делать.

1. Нажмите комбинацию клавиш Windows + R, чтобы открыть окно «Выполнить».

2. Теперь введите Control в поле поиска и нажмите Ввод, чтобы открыть «Панель управления». Для удобства измените режим просмотра через Просмотр → Крупные значки.

3. Нажмите на иконку «Устранение неполадок».

4. Теперь в разделе «Система и безопасность» нажмите на пункт «Устранение неполадок с помощью Центра обновления Windows», расположенный в правой части окна.

Устранение неполадок в Центре обновления Windows для избавления от ошибки 0x80070002

5. На экране появится новое окно с заголовком «Центр обновления Windows». Нажмите на «Далее».

Устранение неполадок в Центре обновления Windows для избавления от ошибки 0x80070002

6. Запустится процесс обнаружения проблемы, который поможет устранить ошибку 0x80070002.

♥ ПО ТЕМЕ: Как записать звук напрямую с компьютера Windows без микрофона (с браузера, плеера, игры и тд).

Способ 2. Исправление системной даты и времени для устранения ошибки 0x80070002 в Windows

1. Нажмите комбинацию клавиш Windows + R, чтобы открыть окно «Выполнить».

2. Теперь введите Control в поле поиска и нажмите Ввод, чтобы открыть «Панель управления».

3. Нажмите на Региональные стандарты → Дата и время или сразу на «Дата и время», если этот пункт присутствует в списке.

Исправление системной даты и времени для устранения ошибки 0x80070002 в Windows 10

4. Измените дату и время в соответствии с вашим регионом и часовым поясом.

Исправление системной даты и времени для устранения ошибки 0x80070002 в Windows 10

♥ ПО ТЕМЕ: Пропал курсор мыши на Windows, что делать?

Способ 3. Изменения в редакторе реестра для устранения ошибки 0x80070002

1. Нажмите комбинацию клавиш Windows + R, чтобы открыть окно «Выполнить». В поле введите Regedit.

2. Теперь точно проследуйте по пути, как показано ниже:

HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows CurrentVersion WindowsUpdate

3. Найдите раздел OSUpgrade. Если он отсутствует, то щелкните правой кнопкой мыши на WindowsUpdate и нажмите Создать → Раздел и дайте ему имя OSUpgrade.

4. В этом разделе, в правой части окна, есть пустое пространство под ключом с именем «По умолчанию», как это показано на скриншоте.

5. Кликните правой кнопкой по пустому пространству и выберите Создать → Параметр DWORD (32 бита).

Изменения в редакторе реестра для устранения ошибки 0x80070002

6. Теперь дайте созданному элементу имя AllowOSUpgrade.

Изменения в редакторе реестра для устранения ошибки 0x80070002

7. Кликните по нему правой кнопкой мыши и выберите «Изменить».

Изменения в редакторе реестра для устранения ошибки 0x80070002

8. Появится новое всплывающее окно, где в поле «Значение» надо ввести цифру 1.

Изменения в редакторе реестра для устранения ошибки 0x80070002

9. Нажмите кнопку ОК и перегрузите систему. Так с помощью этого метода вы сможете устранить ошибку 0x80070002 в Windows 10.

♥ ПО ТЕМЕ: Как отключить пароль на вход в Windows 10: рабочие способы.

Способ 4. Устранение ошибки 0x80070002 при помощи командной строки

1. Введите «командная строка» в поле поиска, расположенного в углу панели инструментов.

2. Запустите приложение от имени администратора.

3. Теперь введите следующую команду chkdsk /r и нажмите «Ввод». Эта команда проверит системный диск.

4. После завершения процесса вам будет предложено ввести Y и N.

5. Нажмите Y, чтобы перезапустить систему.

Устранение ошибки 0x80070002 при помощи командной строки

6. С помощью этого метода ошибка 0x80070002 в Windows 10 тоже может быть выявлена и исправлена.

♥ ПО ТЕМЕ: iCloud на компьютере, или как загружать фото, видео из облака на Windows и обратно.

Способ 5. Запуск dism.exe для борьбы с ошибкой 0x80070002 в Windows

1. Снова запустите командную строку, следуя предыдущему методу.

2. Теперь в черном окне введите следующую команду

dism.exe /Online /Cleanup-Image /Restorehealth

Запуск dism.exe для борьбы с ошибкой 0x80070002 в Windows 10

Перезагрузите систему и проверьте, устранило ли это решение ошибку 0x80070002 или нет.

♥ ПО ТЕМЕ: Диск загружен на 100% на Windows: как исправить проблему.

Заключение

Надеемся, с помощью каких-то из предложенных решений вам удалось избавиться от надоедливой ошибки с кодом 0x80070002 в Windows 10. Помните, что этот код обычно имеет отношение к обновлению Windows. Обратите внимание и на следующие моменты, которые необходимо учитывать перед обновлением системы:

  • Прежде всего, сделайте резервную копию ваших данных.
  • Всегда помните свою учетную запись Microsoft и ключ продукта.
  • На диске должно быть достаточно места.
  • Не забудьте создать диск восстановления.

Смотрите также:

  • Как сделать Windows 10 похожей на Windows 7.
  • Как настроить Windows, чтобы извлекать USB-флешки и накопители без использования «Безопасного извлечения».
  • 32- или 64-битная Windows: какая разница и какую систему нужно устанавливать?

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста rows
  • Ошибка при вызове метода контекста range
  • Ошибка при вызове метода контекста properties
  • Ошибка при вызове метода контекста connectagent
  • Ошибка при вызове метода контекста previewfile1c