使用WScript.shell ActiveX来执行命令行(Using a WScript.shel

2019-07-21 09:20发布

我正在调用带有WScript.shell的ActiveX .exe文件。 该文件是wkhtmltopdf.exe,它是用来将HTML页面转换为.pdf。 一切运作良好时,我打电话C:在代码\ wkhtmltopdf.exe。 它运行,然后关闭正确。 但我的问题是你需要与该程序名称,然后你在阅读之后,你希望它是作为创建的.PDF名HTML文件的名称CMD运行。

例如:

c:\wkhtmltopdf.exe c:\PDFTestPage.html c:\TEST.pdf

这将调用wkhtmltopdf.exe,读取C:\ PDFTestPage.html,然后创建C:\检验.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,但我不能执行时,它使用填充路径。 任何信息都有帮助。 先感谢您。

Answer 1:

根据以下几点:

http://msdn.microsoft.com/en-us/library/d5fk67ky%28v=vs.84%29.aspx

您应该能够直接传递命令的一部分strCommand PARAM,你可能会更好摆脱额外的引号环绕整个命令和参数:

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


Answer 2:

对于其他任何人遇到这个问题,我有,我想我会分享一个类似(但略有不同)的问题。

我也想跑使用命令ActiveXObject("WScript.shell 。我需要运行一个.bat脚本,将推出谷歌浏览器特定的URL。

我有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"');


文章来源: Using a WScript.shell activeX to execute a command line