2

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

我们已经为此奋斗了一段时间,因此非常感谢任何帮助。

4

2 回答 2

2

有点乱。PHP 调用WScript.Shell.Run将调用cmd(当它完成它的事情时/c终止cmd.exe),它将调用cscript.exe运行和解释一个.vbs. 正如你所看到的,有很多事情必须正确!:)

如果您在继续执行 wsh 脚本之前“等待”WScript.Shell.Run结束调用(您的$wait变量)怎么办,这反过来又允许 PHP 继续执行等?

由于您没有等待调用完成,PHP 认为一切都很好并继续下一行(解释语言)。

另外,也许有.vbs创建一个空的文本文件?只是为了让您有迹象表明它实际上已经运行了。

只要退后一步,喝杯啤酒,它就会来找你!Gogo 疑难解答!

并且 - http://ss64.com/vb/run.html

如果 bWaitOnReturn 设置为 TRUE,则 Run 方法返回应用程序返回的任何错误代码。

于 2012-09-27T06:47:56.740 回答
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 系统来测试,所以我不能说这个平台上是否有特定的问题,但我希望这会有所帮助。

于 2012-10-07T09:56:00.107 回答