我在Windows Server 2012上通过Apache(WAMP)执行VBScript时遇到问题。我正在尝试将Docx转换为PDF,脚本从命令行运行得很好,但在运行PHP时失败了。我将提供一个链接,而不是发布vbscript:http://bit.ly/1gngYAn
当按照如下方式通过PHP执行时,WINWORD.exe和VBScript一样启动,它挂在那里,什么也没发生。没有生成PDF(我从未在目录中看到~temporary.docx隐藏文件)。
我几乎尝试过exec、system、passthrough和COM("WScript.Shell")的每一次迭代,结果都是一样的。
为了避免"转义"问题,我还尝试通过.bat文件执行脚本,这样就不需要传递参数,结果也是一样的。
以下是我当前的php代码(convert.vbs是上面链接中的代码):
$obj = new COM ( 'WScript.Shell' );
$obj->Run ( 'cmd /C wscript.exe //B C:UsersAdministratorDesktopconvert.vbs c:wampwwwfileconvtemp_store52fa8272bf84f.docx', 1, false );
//I have tried different "window styles" too, and it doesn't make a difference
我还尝试修改apache服务用户以管理员身份运行(这不是生产服务器),并启用了"允许服务与桌面交互",结果也一样。
我还确保每个人都能"完全控制"目录(读取、写入、执行等)。
如果我从命令行或使用我的".bat"文件运行,它会完美地运行。
由于它挂起(脚本和单词,而不是apache),我查看了控制面板中的事件查看器,但没有相关的事件。
我的问题首先是,为什么会发生这种情况,其次,如果第一个问题无法回答,有没有办法让我更深入地了解流程执行时发生了什么,以便进一步解决问题?到目前为止,我没有可以查看或输出的数据来帮助我进行故障排除。
请随时询问任何细节。我已经尝试了很多次迭代,试图让它发挥作用,到处寻找,似乎都找不到任何答案。
我感谢你的帮助,
Louis
我花了几天时间,但这里是我找到的解决方案:
我用过PsExec-http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
需要以下标志:-h-i-acceptula-u-p
(我在没有-h、-acceptula和-I的情况下尝试过,但没有骰子。这是在WAMP下的Windows Server 2012上运行的)
这里有一个例子:
exec('c:psexecPsExec -h -i -accepteula -u Administrator -p '.$password.' C:WindowsSystem32CScript.exe //Nologo //B c:wampwwwfileconvconvert.vbs '.$filename)
现在它按预期正确执行。
我希望这能帮助到同样处境的人!
PS我在问题中使用的WScript.Shell
执行方法与exec()
一样有效,只是exec()
等待进程退出。
您应该使用exec()函数这是网址http://php.net/manual/fr/function.exec.php