Javascript 使用WScript.shell activeX执行命令行
我正在使用WScript.shell activeX调用.exe文件。该文件为wkhtmltopdf.exe,用于将HTML页面转换为.pdf。当我在代码中调用C:\wkhtmltopdf.exe时,一切正常。它运行,然后正确关闭。但我的问题是,您需要使用程序名从cmd运行它,然后是您正在读取的HTML文件名,然后是您希望创建为的.pdf名称 例如:Javascript 使用WScript.shell activeX执行命令行,javascript,cmd,activex,Javascript,Cmd,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:\wkhtmltopdf.exe c:\PDFTestPage.html c:\TEST.pdf
这将调用wkhtmltopdf.exe,读取c:\PDFTestPage.html,然后创建c:\TEST.pdf。当我把它输入cmd时,它可以正常工作
有人知道activeX不仅会运行和.exe,而且会实际执行命令行吗
这是我目前正在使用的代码
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。我必须移动到目录,然后键入wkhtmltopfd.exe。填充路径为:
C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe
我实际上只使用UNIX,所以我不确定路径中是否有空格。我可以对空格进行chdir,但在执行时不能使用填充路径。任何信息都会有帮助。先谢谢你 根据以下内容:
objShell.run('"C:\\Program Files (x86)\\wkhtmltopdf\\wkhtmltopdf.exe"');
您应该能够将命令作为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"');
对于其他遇到这个问题的人,我有一个类似(但略有不同)的问题,我想我会与他们分享 我也想使用
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¶m2=test2
它实际上会打开
http://localhost:8080/webapp/mypage.html?param1
解决方法很简单——我必须把我的URL
用引号括起来。所以我修改了这行
objShell.run('"C:\\Scripts\\MyChromeBat.bat" MY_URL');
将来
为什么不制作一个简单的cgi来实现这一点,并避免activeX,因为activeX只是IE和权限的噩梦?这需要在intranet上运行,IE始终是默认浏览器。是的,您需要避开反斜杠。