2013-07-03 5 views
0

Я бегу следующую команду с помощью ColdFusion-х cfexecute: composite -geometry +2+2 "C:\Inetpub\wwwroot\isubscribe_uk\diomedes\www\images\newsletter\316\resized.png" "C:\Inetpub\wwwroot\isubscribe_uk\diomedes\www\images\newsletter\templateImages\isubscribe\blank.png" "C:\Inetpub\wwwroot\isubscribe_uk\diomedes\www\images\newsletter\316\part1.png"CFExecute не работает для команды ImageMagick в

<cffunction name="executeWrap" returntype="string"> 
    <cfargument name="commandToRun" type="string" required="Yes"> 
    <cfargument name="cmdArg" type="string" required="Yes"> 

    <cfset var result = ""> 
    <cfexecute name="#arguments.commandToRun#" arguments="#arguments.cmdArg#" 
           variable="result" timeout="15" /> 
    <!--- <cfdump var="#arguments#"> 
    <cfdump var="#result#"> ---> 
    <cfreturn result> 


</cffunction> 

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

Любые идеи, пожалуйста?

+0

Вы получаете сообщение об ошибке (проверьте журналы)? Имеет ли пользователь ColdFusion права на выполнение exe-файла? Как вы избегаете цитат? Если вы выгрузите переменную 'arguments.cmdArg' перед вызовом' cfexecute', что вы получаете? –

+1

1) «Не работает» неоднозначно. Каков фактический результат? Вы получаете какой-либо вывод вообще: переменные, журналы ошибок и т. Д.? 2) Всегда полезно указать ** полный путь ** к исполняемому, т. Е. 'C: \ path \ to \ composite.exe', чтобы гарантировать, что runtime.exec может найти файл. 3) Как упоминал @ Miguel-F, какая учетная запись пользователя - сервер ColdFusion? Это та же учетная запись, которую вы использовали для тестирования через командную строку? – Leigh

+0

У меня были проблемы с cfexecute и appcmd.exe. В результате я использовал командную оболочку (cmd.exe), чтобы заставить ее работать. Вы можете увидеть мой ответ в этом вопросе/ответе для получения дополнительной информации: http://stackoverflow.com/questions/8438342/cfexecute-not-executing-appcmd-exe/8485021#8485021 –

ответ

0

CFExecute игнорирует что-либо, посланное стандартной ошибке вызываемым процессом. Чтобы узнать, есть ли какие-либо генерируемые ошибки, добавьте аргумент «errorVariable» к вызову cfexecute, затем проверьте, есть ли что-то там, и пусть ваш сценарий реагирует соответствующим образом.

<cfexecute name="..command to run..." 
       arguments='.. your arguments...' 
       variable="results" 
       errorVariable="errorOuptut" 
       ></cfexecute> 

<cfif len(errorOuptut)> 
    <cfthrow message="#errorOuptut#" /> 
</cfif> 

Больше информации здесь: http://www.raymondcamden.com/index.cfm/2008/4/9/ColdFusion-801-change-to-CFEXECUTE

+0

* CFExecute игнорирует все, что отправляется стандартной ошибке * Не совсем. До 8.0.1 cfexecute не записывала stderr, что могло привести к зависанию процесса. Версия 8.0.1 добавила возможность захвата stderr и отправки его новому атрибуту 'errorVariable'. – Leigh

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