我正在使用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,但我不能在执行时使用填充路径。任何信息都有帮助。先感谢您。
答案 0 :(得分:10)
根据以下内容:
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"');
答案 1 :(得分:3)
对于遇到这个问题的其他人来说,我有一个类似(但略有不同)的问题我认为我会分享。
我也想使用ActiveXObject("WScript.shell
运行命令。我需要运行一个.bat
脚本,将Google Chrome启动到特定网址。
我的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"');