|
Ошибка выполнения команды 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) т.е. ошибка возникает именно при таком написании. Не понятно, в чем дело?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |