Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Ошибка выполнения команды WshShell.Run

Ошибка выполнения команды WshShell.Run
Я
   Andy MilkyWay
 
05.07.13 - 14:36
Выполняю в DOS-окне такую команду:

C:\Progra~1\ImageM~1.6-Q\Identify.exe D:\test\003.jpg

, которая возвращает нужный мне результат:

D:\test\003.jpg JPEG 3000x4000 3000x4000+0+0 8-bit sRGB 3.757MB 0.000u 0:00.021

Теперь хочу такую же команду выполнить в 1с и получить результат для
дальнейшего анализа его текста. Мне не нужно, чтобы открывалось и закрывалось окно DOS, поэтому в 1с запускаю такой код:
WshShell = новый ComОбъект("WScript.Shell");
RetCode = WshShell.Run("C:\Progra~1\ImageM~1.6-Q\Identify.exe D:\test\003.jpg",0,Истина).StdOut;
Сообщить(RetCode);

В результате выполнения сообщается:
Ошибка выполнения команды C:\Progra~1\ImageM~1.6-Q\Identify.exe D:\test\003.jpg
Что я делаю не так, как получить такую же строку-результат, как и в DOS-окне?
   skunk
 
1 - 05.07.13 - 14:40
получить такую строку прямо в 1с ты не сможешь. можно будет направить вывод строки в текстовый файл. и потом оттуда её тянуть.
   Andy MilkyWay
 
2 - 05.07.13 - 14:42
(1) пробовал перенаправлять  в файл через >d:\test\res.txt - в  DOS окне работает, а тут - нет
   эцп
 
3 - 05.07.13 - 14:48
(0) У ImageMagic есть COM-объекты. Может попробовать обработать через них?

Нужно попробовать запустить эту команду от имени пользователя 1С
   skunk
 
4 - 05.07.13 - 14:48
(2)ну так
RetCode = WshShell.Run("C:\Progra~1\ImageM~1.6-Q\Identify.exe D:\test\003.jpg",0,Истина);

можно еще ковычками поиграть

RetCode = WshShell.Run("""C:\Progra~1\ImageM~1.6-Q\Identify.exe"" ""D:\test\003.jpg""",0,Истина);
   Andy MilkyWay
 
5 - 05.07.13 - 14:53
(3) чуть подробнее не скажете, как вызывать ком-объект?
   Andy MilkyWay
 
6 - 05.07.13 - 14:54
(4) кавычками "игрался", сначала указывал полный путь с длинными именами файлов в кавычках, тоже самое, выдает ошибку
   skunk
 
7 - 05.07.13 - 14:56
а это убирал "StdOut"?
   Andy MilkyWay
 
8 - 05.07.13 - 15:07
(7) Да, пробовал. Я вначале вообще без StdOut делал, потом стал смотреть информацию по WshShell.Run. Нашел, что он может трактовать ">файл" как параметр, поэтому лучше использовать StdOut, что, мол, то же самое. Когда стал использовать StdOut, я и увидел, что там ошибка выдается в результате.
   Jaap Vduul
 
9 - 05.07.13 - 15:13
Чтобы получить доступ к StdOut, нужно использовать exec, а не run.
   Jaap Vduul
 
10 - 05.07.13 - 15:15
Если неохотоа заморачиваться с StdOut, то делаешь батник с перенаправлением в файл, парметром ему передаёшь файл.
Батник уже запускаешь через run.
   Andy MilkyWay
 
11 - 05.07.13 - 15:19
(10) Хорошая мысль, надо попробовать. Спасибо. Отпишусь
   Deon
 
12 - 05.07.13 - 15:22
(10) Батник некрасиво, он же мелькает черным окном. Или нет?
   skunk
 
13 - 05.07.13 - 15:23
(12)второй параметр рана
   Andy MilkyWay
 
14 - 05.07.13 - 15:33
(10) Да, всё получилось красиво с bat-ником: перенаправление в  файл сработало, окно DOS не показывалось
   Jaap Vduul
 
15 - 05.07.13 - 15:34
В принципе, можно и без батника обойтись.
В этом случае нужно через run не саму команду запускать, а командный процессор:
"%comspec% /c ""команда параметры"" > файл"
   Andy MilkyWay
 
16 - 05.07.13 - 15:51
(15) Что-то не получается, если передаю такую строку
%comspec% /c "C:\Program Files\ImageMagick-6.8.6-Q16\Identify.exe" "D:\test\003.jpg" > "D:\test\tmp_info.txt"
   rutony
 
17 - 05.07.13 - 15:55
(0) Вся проблема исключительно в ковычках, нужно что то в этом духе, но это если это не серверная система, на ней такие команды не отрабатываются, нужно писать совсем по другому...

    НовыйФайл = Лев(ИмяФайлаКопии,СтрДлина(ИмяФайлаКопии)-3) + "";
    WshShell = Новый COMОбъект("WScript.Shell");
    WshShell.CurrentDirectory = мКаталогДляОбмена;
    СтрокаЗапуска = """"+мКаталогДляОбмена + ИмяФайлаКонвертацииПерваяЧасть + """ """ + ИмяФайлаКопии +""" """+ НовыйФайл + """";
    WshShell.Run(СтрокаЗапуска, 0, Истина);
    WshShell = Неопределено;
   Jaap Vduul
 
18 - 05.07.13 - 16:15
(16) Да, с ковычками можно запутаться.
Вроде, как-то так должно получиться:
%comspec% /c ""C:\Program Files\ImageMagick-6.8.6-Q16\Identify.exe" "D:\test\003.jpg"" > "D:\test\tmp_info.txt"
   Andy MilkyWay
 
19 - 05.07.13 - 16:50
(18) В Dos-окне получается так, а через  WshShell.Run файл не создается. Ну, да ладно, уже есть способ через bat.Спасибо всем
   Лефмихалыч
 
20 - 05.07.13 - 16:53
Выкиньте свои батники в помойное ведро - у имагемагика есть нормальный программный интерфейс
http://www.imagemagick.org/script/ImageMagickObject.php
   ptiz
 
21 - 05.07.13 - 17:05
а так?
.Run("cmd /c C:\Progra~1\ImageM~1.6-Q\Identify.exe D:\test\003.jpg")
   rutony
 
22 - 05.07.13 - 17:06
(20) Причем тут  батники? Шеловский скрипт же... Запуск файла с параметрами. А эта хрень делает тоже самое..
   Andy MilkyWay
 
23 - 05.07.13 - 18:00
(20) Мы - только "за", только непонятно как установить. Читаю: "When this package is installed, ImageMagickObject and its sample programs are installed to this path:

  c:\Program Files\ImageMagick-6.8.6-Q16\ImageMagickObject"

У меня такого ImageMagickObject, где его скачать?
   Andy MilkyWay
 
24 - 08.07.13 - 10:12
(3) Нашел, где устанавливается ком-объект при инсталляции ImageMagick. В папке появилась подпапка ImageMagickObject. Попробовал фирменный vbs-скрипт, он сработал, но, когда то же пытаюсь сделать в 1с, что и этот скрипт, пишет, что класс не зарегистрирован. Проверил в реестре, поискал, вроде бы нашел ветку с таким названием ImageMagickObject, но ошибка не уходит
   Andy MilkyWay
 
25 - 08.07.13 - 10:22
может я неправильно перенес в 1с код из vb-скрипта:
было
 img = CreateObject('ImageMagickObject.MagickImage.1')
в скрипте
в 1с пишу
 img = новый ComObject('ImageMagickObject.MagickImage.1')
?
   ЧеловекДуши
 
26 - 08.07.13 - 10:27
(25)    WshShell = Новый COMОбъект("ImageMagickObject.MagickImage.1");
   Andy MilkyWay
 
27 - 08.07.13 - 10:42
(26) прошу прощения, это я скопировал неправильно, я так и написал в 1с, как Вы.
   Andy MilkyWay
 
28 - 08.07.13 - 10:58
(27) т.е. ошибка возникает именно при таком написании. Не понятно, в чем дело?


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