2012-09-26 60 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

相關問題