web-dev-qa-db-ja.com

WScript.Shell activeXを使用してコマンドラインを実行する

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を実行できますが、実行時にフィルパスを使用できません。どんな情報も役に立ちます。前もって感謝します。

6
JoBaxter

以下によると:

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"');
10
Pebbl

この問題に遭遇した他の誰にとっても、私が共有したいと思った同様の(ただし少し異なる)問題がありました。

私も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&param2=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"');
3
Jon Rubins