2010-05-05 57 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產生的最後修改時間戳之後。

我想如果你輸出到一個會話變量或其他可以被另一個模板拾取的類型的東西,你可以觀察到已經填充了會話變量的執行結果,假如其他模板在變量實際執行後執行組。