我们必须运行一个vbscript来将自定义Web应用程序中收集的信息整合到我们的管理软件中。 .vbs与CodeIgniter 2中构建的Web应用程序位于同一文件夹中。
这是控制器代码:
public function saveToPM( $budgetType ){
// run it
$obj = new COM( 'WScript.Shell' );
if ( is_object ( $obj ) ) {
$obj->Run( 'cmd /C wscript.exe D:\pamtest\myload.vbs', 0, true );
var_dump($obj->Run);
} else {
echo 'can not create wshell object';
} // end if
$obj = null;
//$this->load->view('goodPush');
} // end saveToPM function
我们在php.ini文件中启用了DCon,并使用dcomcnfg为用户启用了权限。
我从http://www.sitepoint.com/forums/showthread.php?505709-run-a-vbs-from-php借用了代码。
屏幕回显“代码已执行”但vbscript未运行。
我们一直在与此斗争一段时间,所以任何帮助都非常感激。
答案 0 :(得分:2)
有点乱。 PHP调用WScript.Shell.Run
,它会调用cmd
(/c
- 即在cmd.exe
完成其事件时终止cscript.exe
,这将调用.vbs
来运行并解释WScript.Shell.Run
。正如你所看到的那样,必须要做的事情! :)
如果您等待'对于$wait
调用结束(你的.vbs
变量),然后继续执行wsh脚本,这将允许PHP继续执行等?
由于您没有等待完成调用,因此PHP认为它很好,并继续到下一行(解释语言)。
另外,也许{{1}}可能会创建一个空文本文件?这样你就可以看出它实际上已经运行了。
退后一步,喝一杯啤酒吧,它会来找你! Gogo排除故障!
并且 - http://ss64.com/vb/run.html
如果bWaitOnReturn设置为TRUE,则Run方法返回应用程序返回的任何错误代码。
答案 1 :(得分:2)
我已经在Windows XP计算机上使用独立的PHP脚本(没有Codeigniter)测试了您的代码,使用PHP 5.4.4内置的Web服务器,我注意到vbscript被执行了,但是PHP死掉(事件查看器显示ID为1000的通用“应用程序错误”)
但是我也发现从命令字符串中删除“cmd / C”解决了这个问题
这是我用于测试的简单脚本:
<?php
$obj = new COM('WScript.Shell');
if (is_object($obj)) {
//$obj->Run('cmd /C wscript.exe test.vbs', 0, true); // This does'nt work
$obj->Run('wscript.exe test.vbs', 0, true); // This works
var_dump($obj->Run);
} else {
echo 'can not create wshell object';
}
$obj = null;
?>
这是我简单的“test.vbs”脚本:
WScript.Echo "vbscript is running"
另一个似乎有效的解决方案(至少在我的平台上)是“系统”调用:
system('wscript.exe test.vbs');
不幸的是我没有64位IIS系统可以测试,所以我不能说这个平台上是否存在特定问题,但我希望这会有所帮助。