我正在使用 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"'); 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!