我正在使用 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。我必须移动到目录,然后输入 wkhtmltopdf.exe。填充路径为:
C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe
我真的只使用 UNIX,所以我不确定路径中的空格。我可以用空格做一个 chdir,但在执行它时我不能使用填充路径。任何信息都有帮助。先感谢您。
请您参考如下方法:
根据以下内容:
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"');






