2012-10-05 36 views
1

我使用PHP 5.4IIS 7.5PHP - 無法用exec命令打開.exe文件

如果執行一個簡單的命令,它的工作原理

<?php 
    exec("dir", $r); 
    print_r($r); 
?> 

但如果打開.exe文件,它不起作用,頁面加載,直到超時PHP和不開記事本:

<?php 
    exec("notepad.exe", $r); 
    print_r($r); 
?> 

如果在命令行中執行記事本的PHP,它的工作原理

php -f <file> 

我認爲問題出在IIS上,但我不知道是什麼。謝謝!

UPDATE

我做了另一個測試案例和不起作用,頁面加載完成,但不會刪除該任務:

​​

的IIS_IUSRS有權限執行schtasks的。

SOLUTION

記事本不因爲打開是一個互動節目。

對於任務計劃程序,爲任務文件夾(C:\ Windows \ System32 \ Tasks)提供對IUSR的讀寫權限。

回答

1

是什麼讓你覺得它不起作用?

要知道,Windows服務不能正常與桌面交互,因此它可能是記事本啓動的情況下,只是沒有在任何地方,你可以看到它 - 作爲PHP將等待它終止,並沒有人可以看到它終止它,它會超時,正如你所看到的。

可能也可能是網絡服務器正在運行的用戶對記事本所在文件夾(假設它具有相關路徑)沒有執行權限的情況。

+0

謝謝你的回答。我做了另一個測試用例並且不起作用:$ r = exec(「SCHTASKS.exe/Delete/TN TaskTest/F」); – JNo

+0

IIS_USER是否可以訪問該任務? –

+0

我沒有權限執行任務......但現在在任務文件夾中仍然不成功,「exec」函數將我作爲錯誤代碼「1」返回。我會繼續研究,非常感謝。 – JNo

1

問題是,您正在指示exec收集並返回衍生進程的輸出,並且該進程必須終止以使其發生。由於記事本不會立即終止,因此PHP會永久等待(您可以通過運行任何非交互式進程來測試此操作,例如net.exe)。

外賣:exec和朋友不打算髮起交互過程。

在任何情況下,exec將產生一個命令解釋器,它將產生記事本。但是,由於最近的Windows版本中引入了安全功能,並且根據IIS運行的用戶的不同,這些進程不會在當前桌面上創建可見窗口,因此您無法看到任何內容。您將能夠驗證它們是使用任務管理器還是其他同等程序產生的。

+0

感謝您的回答,但是我編輯了描述,並添加了一個新的測試用例,該用例有一個結束並且不起作用的進程。 – JNo