質問
CF をサービスとして実行する場合と CF をコンソール モードで実行する場合のアクセス許可の違いは何ですか?
歴史
Word.Application の COM オブジェクトを作成し、それらを使用して DOC を PDF に変換するコードがあります。しかし、CF 10u8 (64b) に移行すると、ロジックが壊れました。私はインターウェブをチェックし、 java.library.path={} 値、許可、およびそれを機能させるためのすべての可能なヒントを変更して遊んだ。しかし、成功しませんでした。jintegra\bin\ntvinv.dll が 32b 環境で動作するように設計されていることを確認するエントリが Adobe Bug Baseに見つかりました。
そこで、VB スクリプト モードを使用して CF コードを VB スクリプトに変換し、DOC から PDF への変換を行うことにしました。
問題
VB Script のコードは美しく、必要なことをすぐに実行してくれます。<cfexecute> からこの .vbs を呼び出すまでは問題ないようです。それは永遠に処理され、タイムアウトし、何も表示されません+タスクマネージャーにWINWORD.exeの放棄されたプロセスがあります。
引数をバッチファイルに書き込んで呼び出してみました。今回はすぐに実行されますが、何も起こりません。ログを確認したところ、
Microsoft VBScript ランタイム エラー: オブジェクトが必要です: 'wdocs.Open(...)
コマンドプロンプトからバッチファイルを呼び出したところ、エラーなしで実行されました。My DOC -> PDF 変換が完了しました。
ということで、今回はColdFusionサービスの「ログオン...」権限を「ローカルシステムアカウント」からシステムの管理者ユーザーアカウントに変更して起動しました。私は、
ローカル コンピューター上の CF 10 アプリケーション サーバー サービスが開始され、その後停止しました。一部のサービスは、他のサービスまたはプログラムによって使用されていない場合、自動的に停止します
それで、そこに道の終わり。「デスクトップとの対話をサービスに許可する」オプションで遊んでみました。しかし、何も改善されませんでした。
最後に、bin\cfstart.bat ファイルから CF を実行しようとしました。coldfusion.exe -start -consoleがあります。コマンドウィンドウが表示され、CF が起動しました。今度は <cfexecute> が機能し、変換が行われました。エラーは見られません。なぜこれが起こっているのか、私は困惑しています。システム アカウント (ログオンしたユーザー) を使用してサービスとして実行した場合と、同じユーザー アカウントを使用してコンソールとして実行した場合の違いは何ですか? 私は理解するために何が欠けていますか?
デバッグ
サーバー上に LOCAL ユーザー アカウントを作成し、'Log on As...' と同じアカウントでシステムにログインすることの両方でそれを使用しました。どちらの場合も、上記と同じ話です。
許可の問題だと思いますが、どこで、なぜこれが発生しているのかわかりませんでしたか? 特に、なぜコンソール モードではなくサービス モードなのですか?
注: VBS に移動する前に、<cfdocument format="pdf" ... > を使用してみましたが、DOC の特定のフォーマットが原因で例外がスローされます。したがって、現時点ではオプションではありません。
クレジット: VBScript の私のコードはここから派生しています
アップデート
テストできるコードは次のとおりです。
コマンド ライン コード
/c <pathToTheScriptFile>/doc2pdf.vbs <absolutePathTo>aWordDocument.doc o/:<absolutePathTo>finalPDFDocument.pdf
doc2pdf.vbs は 2 つの引数を取ります。1 つ目は wordDocument 名 (パス付き) で、2 つ目はオプションの PDFDocument 名です。オプションの引数が渡されない場合、wordDocument と同じ名前が PDFDocument に与えられます。
ColdFusion コード
<cfexecute name="c:\windows\system32\cmd.exe" arguments="#commands#" outputFile="output.txt" errorFile="error.txt" timeout="20"/>
または、Java ランタイム オブジェクトも使用してみます。
<cfscript>
objJR = createObject("java", "java.lang.Runtime").getRuntime();
result = objJR.exec(commands);
writeDump(result);
</cfscript>
ローカル マシンで実行するには、次のものが必要です。
- 「PDF として保存」プラグインが添付された MS Word 2007 以降のインストール。
- VBScript (ここから入手してください)
- CF 10. Update 8 を使用しています。これは、どの更新レベルでも機能します。