2012-09-26 171 views
2

我们必须运行一个vbscript,以将收集在自定义Web应用程序中的信息整合到我们的管理软件中。该.vbs是在同一文件夹作为Web应用程序内置于笨2.32位PHP可以在64位IIS服务器上运行.vbs脚本吗?

这里是控制器代码:

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

做的VBS直接在命令行中运行? – raidenace

+0

你不检查,如果代码实际上通过检查$ obj-> run的返回值来执行你只是假设它的确如此回应。 –

+0

在服务器上,我可以双击VBS和命令行,在这两种情况下运行它,它工作正常。 – jgravois

回答

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方法返回由应用程序返回的任何错误代码。

+0

最后一点是如果你想要像Marc B所建议的那样检查'$ obj-> run'的结果。如果等待未设置为true'Run'调用将始终返回0 – Spyros

+0

斯皮罗斯,我改变了代码,我认为你的建议。但是,我只是得到一个白色的屏幕和控制从不返回。 – jgravois

2

我已经在Windows XP机器上用PHP 5.4.4内置的web服务器测试了一个独立的PHP脚本(没有Codeigniter)的代码,我注意到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; 

?> 

这是我简单的“测试。VBS”脚本:

WScript.Echo "vbscript is running" 

,这似乎是工作(至少在我的平台),另一种解决方案是‘系统’的呼叫:

system('wscript.exe test.vbs'); 

不幸的是我没有64位IIS系统与测试,所以我真的不能说,如果有这个平台上的具体问题,但我希望这会有所帮助。

+0

你的第一选择返回“对象(com_safearray_proxy)#28(0){}”,系统选项旋转了,没有警告或错误白色的页面。 – jgravois

+0

@jgravois感谢您的反馈。您是否检查了事件日志或IIS日志中的错误? – 2012-10-08 11:28:56

+0

没有生成错误 – jgravois

相关问题