Выполнить .bat файл, не дожидаясь окончания - PullRequest
0 голосов
/ 19 февраля 2012

Я пытаюсь создать своего рода панель, на которой мне бы хотелось, чтобы операции запуска / остановки выполнялись приложением (игровым сервером).

HTTP-сервер работает под управлением Windows Server 2008 R2 (WAMP SERVER 64)-bit)

Я обнаружил, что могу использовать: psExec, он не ожидает завершения приложения и, по крайней мере, предоставил мне PID.

Существует код .bat:

cd "C:\Program Files (x86)\LucasArts\Star Wars Jedi Knight Jedi Academy\GameData\"
.\jampded  +set dedicated 2 +set net_port 29075 +set fs_game lugormod +exec server.cfg 

и код PHP:

<?php
$command = "\"C:\\Program Files (x86)\\LucasArts\\Star Wars Jedi Knight Jedi Academy\\GameData\\PsExec.exe\" -d \"C:\\Program Files (x86)\\LucasArts\\Star Wars Jedi Knight Jedi Academy\\GameData\\serverstart.bat\"";
//echo ($command);
exec("$command");
?>

, показывающий: ошибка при выполнении test.php, время выполнения превышало 30 с

Но когда я пишу эту команду вконсоль, она показывает PID и автоматически выходит, даже когда запущенная прога все еще выполняется.

(извините за мой английский;))

Ответы [ 2 ]

2 голосов
/ 19 февраля 2012

PsExec должно быть достаточно для запуска процесса в фоновом режиме, однако для этого требуется, чтобы пользователь сначала принял EULA (интерактивное окно). Если вы запускаете его из командной строки, вы уже приняли условия, но apache (и php под apache) работает как системный пользователь, который еще не принял условия.

Вы можете попробовать запустить psexec с параметром /accepteula и посмотреть, поможет ли это.

[+] Чтобы получить PID на выходе:

echo exec('psexec.exe -accepteula -i -d "c:/file.bat" 2>&1')
0 голосов
/ 22 сентября 2014

Попробуйте это:

$command = "Path_to_your_bat_file";
pclose(popen("start /B ". $command, "r"));

Это работает для меня ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...