WScript.Shell activeXで.exeファイルを呼び出すことに取り組んでいます。ファイルはwkhtmltopdf.exeで、HTMLページを.pdfに変換するために使用されます。コードでC:\ wkhtmltopdf.exeを呼び出しているだけで、すべてがうまく機能しています。実行してから正しく閉じます。しかし、私の問題は、プログラム名でcmdから実行する必要があることです。次に、読み取っているHTMLファイル名の後に、作成したい.pdf名を続けます。
例えば:
c:\wkhtmltopdf.exe c:\PDFTestPage.html c:\TEST.pdf
これにより、wkhtmltopdf.exeが呼び出され、c:\ PDFTestPage.htmlが読み取られて、c:\ TEST.pdfが作成されます。 cmdに入力すると正常に動作します。
誰もが.exeを実行するだけでなく、実際にコマンドラインを実行するActiveXを知っていますか?
これは私が現在使用している私のコードです。
function callShellApplication(){
var objShell = new ActiveXObject("WScript.Shell");
objShell.run('"c:\wkhtmltopdf.exe"');
}
本当に次のようにしたいと思います。
function callShellApplication(){
var objShell = new ActiveXObject("WScript.Shell");
objShell.run('"c:\wkhtmltopdf.exe c:\PDFTestPage.html c:\TEST.pdf"');
}
サイドノートも。何らかの理由で、絶対パスから.exeを起動できません。ディレクトリに移動して、wkhtmltopdf.exeと入力する必要があります。フィルパスは次のとおりです。
C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe
私は本当にUNIXでしか機能しないので、パス内のスペースについてはわかりません。スペースでchdirを実行できますが、実行時にフィルパスを使用できません。どんな情報も役に立ちます。前もって感謝します。
以下によると:
http://msdn.Microsoft.com/en-us/library/d5fk67ky%28v=vs.84%29.aspx
コマンドをstrCommand
パラメータの一部として直接渡すことができるはずです。おそらく、コマンド全体と引数全体を囲む余分な引用符を取り除く方が良いでしょう。
function callShellApplication(){
var objShell = new ActiveXObject("WScript.Shell");
objShell.run('c:\wkhtmltopdf.exe c:\PDFTestPage.html c:\TEST.pdf');
}
また、次のように各項目を引用符で囲むことにより、パスのスペースを処理できる必要があります。
function callShellApplication(){
var objShell = new ActiveXObject("WScript.Shell");
objShell.run('"C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe" "c:\PDFTestPage.html" "c:\TEST.pdf"');
}
また、bWaitOnReturn
を使用するかどうか、どのintWindowStyle
が必要かを覚えておく必要があります(一部の実行可能ファイルは、特定のスタイルの恩恵を受ける場合があります)。
また、注意書きとして、WScript.Shell
を使用してからしばらく経ちましたが、パスのバックスラッシュをエスケープする必要がある場合があります。したがって、パスは次のようにする必要があります。
objShell.run('"C:\\Program Files (x86)\\wkhtmltopdf\\wkhtmltopdf.exe"');
この問題に遭遇した他の誰にとっても、私が共有したいと思った同様の(ただし少し異なる)問題がありました。
私もActiveXObject("WScript.Shell
を使用してコマンドを実行したいと思っていました。特定のURLに対してGoogle Chromeを起動する.bat
スクリプトを実行する必要がありました。
私が持っていたJSは以下の通りでした:
var objShell = new ActiveXObject("WScript.Shell");
objShell.run('"C:\\Scripts\\MyChromeBat.bat" MY_URL');
これにより、非常に簡単な.bat
スクリプトが適切に起動されます。
start "" chrome.exe %1
私が遭遇した問題は、MY_URL
にいくつかのクエリパラメータが含まれており、上記のJSを使用すると、クエリパラメータがある程度削除されることでした。だから私が開こうとしたとき
http://localhost:8080/webapp/mypage.html?param1=test¶m2=test2
実際に開きます
http://localhost:8080/webapp/mypage.html?param1
修正は単純であることがわかりました-MY_URL
を引用符で囲む必要がありました。だから私は行を変更しました
objShell.run('"C:\\Scripts\\MyChromeBat.bat" MY_URL');
することが
objShell.run('"C:\\Scripts\\MyChromeBat.bat" "MY_URL"');