2013-08-26 36 views
3

我想通過編譯我的C#源代碼的msbuild編譯可執行文件,大部分腳本依賴於創建的可執行文件,所以它必須等待msbuild編譯源代碼。等待要創建的文件

如果我沒有放置任何類型的while循環,它會很好地編譯並創建可執行文件,但問題在於腳本的其餘部分執行速度很快,最終結果不正確。

所以目前我使用這個..

exec('C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe C:\Users\Administrator\AppData\Roaming\Compile\Myprogram\Myprogram.sln /p:Configuration=Release'); 

while (!file_exists('C:\Users\Administrator\AppData\Roaming\Compile\Myprogram\bin\Release\Myprogram.exe')) sleep(1); 

然而,在這種情況下它的幾乎一樣,如果exec命令從來沒有得到的都跑了。它陷入了一個無限循環,最終超時導致exe永遠不會被編譯。

任何關於正確的方式去建議這個建議?

+1

確定運行Web服務器的用戶運行此命令的權限,並且所有適當的環境變量被設置。 PHP應該阻塞,直到外部程序完成,使您的while循環不必要。 – Orangepill

+0

是的,我相信如此,因爲如果我刪除while循環,exec命令運行良好,msbuild編譯可執行文件。問題是腳本的其餘部分在這種情況發生之前就會運行。 – user2379231

回答

0

嘗試運行它,如下所示:

$output = array(); 
$cmd = 'C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe C:\Users\Administrator\AppData\Roaming\Compile\Myprogram\Myprogram.sln /p:Configuration=Release && exit'; 
exec($cmd, $output); 
+0

從某種意義上說,我不希望它在後臺運行。它需要掛起直到它結束。它不掛在exec命令上,雖然它掛在while循環中 – user2379231

+0

@ user2379231查看更新回答 – alfasin

+0

由於缺少權限或者沒有在運行web的用戶環境中可以訪問所有必需的值,您的命令可能會失敗服務。不知道它在Windows上,但你可以通過重定向標準錯誤達到標準錯誤,嘗試在命令末尾添加'2>&1' – Orangepill