32位PHP可以在64位IIS服务器上运行.vbs脚本吗?

时间:2012-09-26 15:25:35

标签: php codeigniter iis com

我们必须运行一个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未运行。

我们一直在与此斗争一段时间,所以任何帮助都非常感激。

2 个答案:

答案 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系统可以测试,所以我不能说这个平台上是否存在特定问题,但我希望这会有所帮助。