在WAMP堆栈上通过PHP执行vbscript时出现问题



我在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

最新更新