【问题标题】:Using a WScript.shell activeX to execute a command line使用 WScript.shell activeX 执行命令行
【发布时间】:2013-03-12 01:02:04
【问题描述】:

我正在使用 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,但在执行它时我不能使用填充路径。任何信息都有帮助。先感谢您。

【问题讨论】:

  • 你为什么不做一个简单的 cgi 来完成它并避免只有 IE 的 activeX 和权限噩梦?
  • 这需要在内网运行,IE总是默认浏览器。

标签: javascript cmd activex


【解决方案1】:

根据以下:

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

【讨论】:

  • 是的,你需要转义反斜杠。
【解决方案2】:

对于遇到此问题的其他人,我有一个类似(但略有不同)的问题,我认为我会分享。

我也想使用ActiveXObject("WScript.shell 运行命令。我需要运行一个 .bat 脚本,它将 Google Chrome 启动到特定的 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"');

【讨论】:

    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多