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中没有抛出错误或警告,它根本什么都不做。

我修改了代码,这个版本也不起作用:

<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#" />
4

3 回答 3

4

权限问题是最常见的原因。但是,如果您正在运行 CF8,您也可以尝试重定向错误流并添加显式终止标志。只是看看你是否得到任何输出或看到不同的行为。早期版本没有捕获错误流,导致某些进程挂起。它已在其中一个 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#">  
于 2010-05-05T15:57:02.523 回答
1

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

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

于 2010-05-05T15:33:43.453 回答
0

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

我认为,如果您输出到会话变量或其他模板可以拾取的类型,您可以观察填充会话变量的执行结果,前提是其他模板在实际设置变量后执行。

于 2015-09-10T22:28:17.570 回答