<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。其他示例工作正常,如在CFDocs示例中运行cmd.exe或netstat.exe。我没有抛出任何错误或者在errorVariable中发出警告,它什么也没做。
我修改了代码,这个版本也不起作用:
<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 :(得分: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#">
答案 1 :(得分:1)
如果没有看到代码或您的服务器设置,我猜您需要检查CF运行的用户帐户的权限。
如果CF在默认用户下运行,您可能需要创建一个用户,可以访问您要执行的任何操作。然后更改要在此用户下运行的服务。或者,您可以为您尝试访问的资源分配更自由的权限。
答案 2 :(得分:0)
我也遇到过cfexecute和GraphicsMagick。我认为交易是GM在异步运行并在完成之前返回。使用outputFile / errorFile运行一些测试而不是它们的变量等价物,然后cffile读取输出文件上的fileInfo(每个测试脚本为空但观察到打开时有内容),我看到输出文件的修改时间内容实际上是在FileInfo产生的最后修改时间戳之后。
我认为如果你输出一个会话变量或某个可以被另一个模板拾取的东西,你可以观察到填充了会话变量的执行结果,前提是另一个模板在变量实际设置后执行