2010-05-05 4 views
2
<cfset LOCAL.cmd = expandPath('..\library\gm.exe') /> 
<cfset LOCAL.args = "convert image1.jpg image2.jpg" /> 

<cfexecute variable="gm" errorVariable="error" 
name="#LOCAL.cmd#" 
timeout="10" 
arguments="#local.args#" /> 

<cfdump var="#gm#" /> 

Этот код всегда приводит к пустой строке в gm. Независимо от того, как я выполняю gm с параметрами или без них. Другие примеры работают отлично, как работает cmd.exe или netstat.exe, как в примере CFDocs. Я не получаю ошибок или предупреждений в errorVariable, он просто ничего не делает.CFExecute не выполняет команду

Я изменил код, эта версия не работает, либо:

<cfset LOCAL.cmd = expandPath('..\library\gm.exe') /> 
<cfset LOCAL.args = "convert ""#variables.uploadDirectory##LOCAL.file.source#"" ""#variables.uploadDirectory#optimal-#LOCAL.file.source#""" /> 
<cfexecute errorVariable="error" 
    name="c:\windows\system32\cmd.exe" 
    timeout="10" 
    outputFile="#expandPath('.\gm.log')#" 
    arguments="/C#local.cmd# #LOCAL.args#" /> 
+0

Проводка кода будет очень полезна. –

+0

Какой ответ вы ожидаете? –

+0

Также, этот пример работает, когда вы запускаете его непосредственно из командной строки под той же учетной записью пользователя, что и CF? – Leigh

ответ

1

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

Если CF работает под пользователем по умолчанию, вам может потребоваться создать пользователя с доступом к тому, что вы пытаетесь сделать. Затем измените сервис (ы), который будет запущен под этим пользователем. Кроме того, вы можете назначить более либеральные разрешения для ресурса, к которому вы пытаетесь получить доступ.

+0

Он работает как локальная система, поэтому он должен иметь разрешения для этого файла. Все это локально в моей файловой системе. Я буду пытаться возиться с разрешениями на файл, не следует ли это вызывать ошибку безопасности, если это проблема? – Drew

+0

Коррекция, coldfusion работает под моей учетной записью пользователя. Таким образом, разрешения не являются проблемой. – Drew

4

Проблемы с разрешениями являются наиболее распространенной причиной. Однако, если вы используете CF8, вы также можете попробовать redirecting the error stream and adding an explicit terminate flag. Просто чтобы узнать, получаете ли вы какой-либо результат или видите другое поведение. Ранние версии не отображали поток ошибок, из-за чего некоторые процессы зависали. Он был исправлен в одном из обновленных программ CF8.

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

Обновление: Я проверил его с CF9. Он работает при использовании абсолютных путей изображения. Хотя переменная «gm» понятна пуста, так как вывод направляется в файл изображения.

<cfexecute variable="gm" 
    errorVariable="errorOut" 
    name="C:\GraphicsMagick-1.3.12-Q16\gm.exe" 
    timeout="10" 
    arguments="convert c:\art.gif c:\artCopyFromCF9.gif" /> 

<cfdump var="#variables#"> 
+0

Я запускаю CF9, поэтому у меня есть обновление, которое включает errorFile. Я попытался запустить это и не получил никакой дополнительной информации в stdout. – Drew

+0

@Drew - пара вещей a) Как спросил Бен, что вы ожидаете? b) Действительно ли он работает при выполнении из командной строки и c) только для усмешек, попробовали ли вы использовать cmd.exe в качестве программы и указали gm.exe в аргументах? – Leigh

+0

Я разместил комментарии выше, я обновил код для использования каталога cmd.exe и передал свою программу через/C. Кроме того, я изменил это для эха перед полным путем, скопировал это в командную строку и работал отлично. – Drew

0

Я также столкнулся с этим с помощью cfexecute и GraphicsMagick. Я считаю, что сделка заключается в том, что GM работает асинхронно и возвращается до его завершения. Выполнение некоторых тестов с помощью outputFile/errorFile вместо их переменных эквивалентов, за которыми следует cffile чтение fileInfo в выходном файле (который пуст на тестовый скрипт, но наблюдается наличие содержимого при открытии), я вижу, что измененное время выходного файла с содержимым на самом деле после последней измененной метки времени, предоставленной FileInfo.

Я думаю, что если вы выведете на переменную сеанса или что-то подобное, которое может быть подобрано другим шаблоном, вы можете наблюдать за результатами выполнения, заполнив переменную сеанса, если другой шаблон выполняется после того, как переменная на самом деле задавать.

Смежные вопросы