Имя: Пароль:
1C
1С v8
Ошибка выполнения команды WshShell.Run
,
0 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-окне?
1 skunk
 
05.07.13
14:40
получить такую строку прямо в 1с ты не сможешь. можно будет направить вывод строки в текстовый файл. и потом оттуда её тянуть.
2 Andy MilkyWay
 
05.07.13
14:42
(1) пробовал перенаправлять  в файл через >d:\test\res.txt - в  DOS окне работает, а тут - нет
3 эцп
 
05.07.13
14:48
(0) У ImageMagic есть COM-объекты. Может попробовать обработать через них?

Нужно попробовать запустить эту команду от имени пользователя 1С
4 skunk
 
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,Истина);
5 Andy MilkyWay
 
05.07.13
14:53
(3) чуть подробнее не скажете, как вызывать ком-объект?
6 Andy MilkyWay
 
05.07.13
14:54
(4) кавычками "игрался", сначала указывал полный путь с длинными именами файлов в кавычках, тоже самое, выдает ошибку
7 skunk
 
05.07.13
14:56
а это убирал "StdOut"?
8 Andy MilkyWay
 
05.07.13
15:07
(7) Да, пробовал. Я вначале вообще без StdOut делал, потом стал смотреть информацию по WshShell.Run. Нашел, что он может трактовать ">файл" как параметр, поэтому лучше использовать StdOut, что, мол, то же самое. Когда стал использовать StdOut, я и увидел, что там ошибка выдается в результате.
9 Jaap Vduul
 
05.07.13
15:13
Чтобы получить доступ к StdOut, нужно использовать exec, а не run.
10 Jaap Vduul
 
05.07.13
15:15
Если неохотоа заморачиваться с StdOut, то делаешь батник с перенаправлением в файл, парметром ему передаёшь файл.
Батник уже запускаешь через run.
11 Andy MilkyWay
 
05.07.13
15:19
(10) Хорошая мысль, надо попробовать. Спасибо. Отпишусь
12 Deon
 
05.07.13
15:22
(10) Батник некрасиво, он же мелькает черным окном. Или нет?
13 skunk
 
05.07.13
15:23
(12)второй параметр рана
14 Andy MilkyWay
 
05.07.13
15:33
(10) Да, всё получилось красиво с bat-ником: перенаправление в  файл сработало, окно DOS не показывалось
15 Jaap Vduul
 
05.07.13
15:34
В принципе, можно и без батника обойтись.
В этом случае нужно через run не саму команду запускать, а командный процессор:
"%comspec% /c ""команда параметры"" > файл"
16 Andy MilkyWay
 
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"
17 rutony
 
05.07.13
15:55
(0) Вся проблема исключительно в ковычках, нужно что то в этом духе, но это если это не серверная система, на ней такие команды не отрабатываются, нужно писать совсем по другому...

   НовыйФайл = Лев(ИмяФайлаКопии,СтрДлина(ИмяФайлаКопии)-3) + "1с";
   WshShell = Новый COMОбъект("WScript.Shell");
   WshShell.CurrentDirectory = мКаталогДляОбмена;
   СтрокаЗапуска = """"+мКаталогДляОбмена + ИмяФайлаКонвертацииПерваяЧасть + """ """ + ИмяФайлаКопии +""" """+ НовыйФайл + """";
   WshShell.Run(СтрокаЗапуска, 0, Истина);
   WshShell = Неопределено;
18 Jaap Vduul
 
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"
19 Andy MilkyWay
 
05.07.13
16:50
(18) В Dos-окне получается так, а через  WshShell.Run файл не создается. Ну, да ладно, уже есть способ через bat.Спасибо всем
20 Лефмихалыч
 
05.07.13
16:53
Выкиньте свои батники в помойное ведро - у имагемагика есть нормальный программный интерфейс
http://www.imagemagick.org/script/ImageMagickObject.php
21 ptiz
 
05.07.13
17:05
а так?
.Run("cmd /c C:\Progra~1\ImageM~1.6-Q\Identify.exe D:\test\003.jpg")
22 rutony
 
05.07.13
17:06
(20) Причем тут  батники? Шеловский скрипт же... Запуск файла с параметрами. А эта хрень делает тоже самое..
23 Andy MilkyWay
 
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, где его скачать?
24 Andy MilkyWay
 
08.07.13
10:12
(3) Нашел, где устанавливается ком-объект при инсталляции ImageMagick. В папке появилась подпапка ImageMagickObject. Попробовал фирменный vbs-скрипт, он сработал, но, когда то же пытаюсь сделать в 1с, что и этот скрипт, пишет, что класс не зарегистрирован. Проверил в реестре, поискал, вроде бы нашел ветку с таким названием ImageMagickObject, но ошибка не уходит
25 Andy MilkyWay
 
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");
27 Andy MilkyWay
 
08.07.13
10:42
(26) прошу прощения, это я скопировал неправильно, я так и написал в 1с, как Вы.
28 Andy MilkyWay
 
08.07.13
10:58
(27) т.е. ошибка возникает именно при таком написании. Не понятно, в чем дело?