1

Тема: WSH: Ошибка выполнения команды через WSH.Run()

Выполняю в 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-окне?

2

Re: WSH: Ошибка выполнения команды через WSH.Run()

ae23, Вы путаете «.Run()» и «.Exec()». Вы вообще что хотите получить — вывод утилиты?

У меня нет v8.x. На v7.7 работает, например, такое:

Процедура Сформировать()
    Перем WshRunning;
    Перем WshFinished;
    Перем WshFailed;

    Перем objWshShell;
    Перем objWshExec;
    Перем strStdOut;
    
    
    WshRunning  = 0;
    WshFinished = 1;
    WshFailed   = 2;
    
    objWshShell = СоздатьОбъект("WScript.Shell");
    objWshExec  = objWshShell.Exec("""C:\Program Files\ImageMagick-6.3.4-Q8\identify.exe"" ""C:\4544564533_fa2ceb7ffb_o.jpg""");
    
    Если objWshExec.Status <> WshFailed Тогда
        strStdOut = "";
        
        Пока objWshExec.Status = WshRunning Цикл
            strStdOut = strStdOut + objWshExec.StdOut.ReadAll();
        КонецЦикла;
    КонецЕсли;

    Сообщить(strStdOut);
КонецПроцедуры
+ Результат
C:\4544564533_fa2ceb7ffb_o.jpg JPEG 4752x3168 4752x3168+0+0 DirectClass 8-bit 8.40572mb 0.969u 0:01

3

Re: WSH: Ошибка выполнения команды через WSH.Run()

Да, я именно хочу получить результат работы утилиты. Спасибо, alexii, сейчас попробую воспользоваться Вашим кодом

4

Re: WSH: Ошибка выполнения команды через WSH.Run()

Спасибо, alexii! Получилось! Единственный минус, во время работы все равно мелькает DOS-окно. Нельзя этого никак избежать?

5

Re: WSH: Ошибка выполнения команды через WSH.Run()

Для метода «.Exec()» не предусмотрено механизма управления видимостью окна дочернего процесса.

Если очень надо скрывать — делайте что-то наподобие: «.Run("""%comspec%"" /c ""%ProgramFiles%\ImageMagick-6.3.4-Q8\identify.exe"" ""C:\4544564533_fa2ceb7ffb_o.jpg"" >""%Temp%\MyIdentify.tmp""", 0, True)», затем разбирайте полученный файл.

Вы так и не написали — что именно Вы хотите получить: размеры, битность, або что ещё?