2013-08-26 3 views
3

Я пытаюсь скомпилировать исполняемый файл через PHP с помощью msbuild, который компилирует мой источник C#, большая часть скрипта зависит от создаваемого исполняемого файла, поэтому он должен дождаться, когда 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); 

Однако в этом случае это почти как если команда ехес никогда не будет побежал на всех. Он застревает в бесконечном цикле и, в конце концов, истекает время, в результате чего exe никогда не компилируется.

Любые предложения по правильному пути решения этого вопроса?

+1

Вы уверены, что пользователь работает веб-сервер имеет разрешение на выполнение этой команды, и что все соответствующие переменные среды создаются. 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

Ваша команда, вероятно, не работает сразу после плохого из-за отсутствия разрешений или не все необходимые значения доступны в среде пользователя, работающего в сети Сервисы. Не уверен в этом, но вы можете получить доступ к std err, перенаправив stderr в std out, попробуйте добавить '2> & 1' в конец вашей команды – Orangepill

Смежные вопросы