2010-05-05 63 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,无论有没有参数。其他示例可以像在CFDocs示例中一样正常运行cmd.exe或netstat.exe。我没有得到任何错误或者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

发布一些代码会很有帮助。 – 2010-05-05 15:28:52

+0

你期待什么回应? – 2010-05-05 16:07:19

+0

此外,当您直接从命令行运行它时,该示例是否在与CF相同的用户帐户下运行? – Leigh 2010-05-05 16:09:48

回答

1

没有看到代码或服务器设置,我猜你需要检查权限的用户帐户CF下运行。

如果CF在默认用户下运行,您可能需要创建一个用户,以访问您正在尝试执行的任何操作。然后将服务更改为在该用户下运行。或者,您可以为您尝试访问的资源分配更多的自由权限。

+0

它作为本地系统运行,所以它应该对这个文件有权限。它在我的文件系统上都是本地的。我会尝试搞乱文件的权限,如果这是问题,它不应该抛出安全错误吗? – Drew 2010-05-05 15:39:25

+0

纠正,coldfusion正在我的用户帐户下运行。所以权限绝对不是问题。 – Drew 2010-05-05 15:53:58

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的更新。我试着运行这个,并没有收到标准输出中的任何额外信息。 – Drew 2010-05-05 16:14:25

+0

@德鲁 - 一对夫妇a)当本问,你期望发生什么? b)当它从命令行执行时,它实际上工作吗?c)只是为了咧嘴笑,你是否尝试过使用cmd.exe作为程序并在参数中指定gm.exe? – Leigh 2010-05-05 16:18:34

+0

我上面发表了评论,我更新了代码以使用cmd.exe目录并通过/ C传递我的程序。另外,我将其改为在完整路径之前回显,将其复制到命令提示符中并完美运行。 – Drew 2010-05-05 16:24:31

0

我也遇到过与cfexecute和GraphicsMagick。我认为这笔交易是通用汽车正在异步运营,并在其完成前返回。使用outputFile/errorFile而不是它们的变量等价物运行一些测试,然后在输出文件中读取fileInfo(每个测试脚本为空,但在打开时观察到内容时),我会看到输出文件的修改时间内容实际上是由FileInfo产生的最后修改时间戳之后。

我想如果你输出到一个会话变量或其他可以被另一个模板拾取的类型的东西,你可以观察到已经填充了会话变量的执行结果,假如其他模板在变量实际执行后执行组。