Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用WScript.shell activeX执行命令行_Javascript_Cmd_Activex - Fatal编程技术网

Javascript 使用WScript.shell activeX执行命令行

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,读

我正在使用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时,它可以正常工作

有人知道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&param2=test2
它实际上会打开

http://localhost:8080/webapp/mypage.html?param1
解决方法很简单——我必须把
我的URL
用引号括起来。所以我修改了这行

objShell.run('"C:\\Scripts\\MyChromeBat.bat" MY_URL');
将来


为什么不制作一个简单的cgi来实现这一点,并避免activeX,因为activeX只是IE和权限的噩梦?这需要在intranet上运行,IE始终是默认浏览器。是的,您需要避开反斜杠。