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 アップデーターの 1 つで修正されました。

更新: 画像のパスが相対的であることに気付きました。おそらく、プログラムはそれらを見つけるのに苦労しています。画像の絶対パスを使用してみてください。

更新: 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 に答える