uruchamianie .bat pod windowsem

Odpowiedz Nowy wątek
2012-02-14 14:49
0

Witam, chciałbym z poziomu PHP uruchomić skrypt .bat oraz uzyskać PID procesu, aby mieć możliwość późniejszego zamknięcia tego programu.
Czytałem o exec ale w manualu nie ma nic o PID, a do tego wszystkie przykłady w internecie są pod linuxa

Pomijając, że plik .bat sam w sobie nie jest programem, to po co w ogóle musisz taki plik uruchamiać? \o/ - Patryk27 2012-02-14 15:09

Pozostało 580 znaków

2012-02-15 14:18
0

Ostatecznie mogę skopiować zawartość pliku bat, jednak jak to uruchomić bez czekania na koniec działania aplikacji + uzyskać PID

Pozostało 580 znaków

2012-02-15 17:29
2

Skomplikowane dość, ale wykonalne.
exec() powoduje, że PHP wisi oczekując na zakończenie aplikacji. Aby uruchomić w tle możesz użyć w Linuksie &, a w Windows np. start.exe.
Potem możesz użyć np. tasklist.exe do uzyskania listy aktualnych procesów i ich PID (między innymi) - tasklist jest dostępny bodaj od Windows XP SP2, więc już dawno. Na tym, co zwraca tasklist szukasz PID przypisanego do cmd.exe (bo to interpreter plików BAT).

Zamknięcie na podstawie PID może załatwić aplikacja taskkill: taskkill.exe /PID 1234.

Pozostało 580 znaków

2012-02-15 19:09
0

jest tu jeszcze jeden problem, może się zdarzyc tak że będą działać 3 takie same programy jednak z innymi parametrami.

o ile w linuxie samo exec zwraca pid, to w windowsie przeszukiwanie tasklist - ale skoro działają 2 inne to jak moge znaleźć ten 3. dodam że nie jest to jedna strona ktora nimi zarzadza

edytowany 2x, ostatnio: carkar, 2012-02-16 17:34

Pozostało 580 znaków

2012-02-15 22:27
1

Pomysł na szybko:

start.exe pozwala na sprecyzowanie nazwy okna, z którym będzie wywoływana aplikacja, np. start.exe foobar cmd.exe. Z kolei tasklist pozwala filtrować po nazwie okna, np. tasklist.exe /FI "WINDOWTITLE eq foobar". Uruchamiaj każdy z losowym identyfikatorem jako nazwą okna, a znajdziesz PID tego, o który chodzi.

Pomysł nieco na około, ale chyba lepszy:
Użyj psexec z pakietu PsTools z Sysinternals. Potrafi zwrócić PID utworzonego procesu (co prawda w formie tekstowej, ale da się sparsować) i od razu kończyć swoje działanie.

C:\Users\Marcin>psexec -d cmd.exe

PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

cmd.exe started with process ID 5376.

C:\Users\Marcin>

http://forum.sysinternals.com[...]idden-windows_topic12108.html

Pozostało 580 znaków

2012-02-16 17:33
0

Pojawił się następny problem..

$command = "cd \"C:\\Program Files (x86)\\LucasArts\\Star Wars Jedi Knight Jedi Academy\\GameData\"";
$command .= "\r\n";
$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\"";

No cóż, chciałbym aby najpierw użyć CD a następnie od razu dalszą cześć uruchamiającą serwer.
Niestety znaki \r\n nie są obsługiwane przez cmd

Jeszcze ludzie w Jedi Knight grają? Z dobre 6 lat temu administrowałem jednym z prywatnych serwerów JK:JA, na którym graliśmy odprężające TDMy z graczami z polskiej czołówki ESL. Moim przywilejem było dostawanie od nich batów :P. - Rev 2012-02-16 18:15

Pozostało 580 znaków

2012-02-16 17:57
1

Jak to nie są? Są! Tylko to nie jest konsola :|
Obstawiam, że nie istnieje nawet w tym kontekście polecenie 'cd'.

Zmień bieżący katalog w ten sposób: http://www.php.net/manual/pl/function.chdir.php
Później wykonaj po prostu "serverstart.bat".

Z drugiej strony przekombinowałeś - po cholerę w ogóle robić cd lub chdir skoro używasz ścieżek absolutnych?


Women were the reason I became a monk - and, ah, the reason I switched back...
edytowany 4x, ostatnio: Demonical Monk, 2012-02-16 18:01

Pozostało 580 znaków

2012-02-16 18:03
0

Gdyż taki jest początek bata: .\jampded +set BLAH BLAH
Gdy nie ma najpierw CD, program za ścieżkę z której wszystko wykonuje uznaje: C:/windows/administartor, a ja chcę aby to bylo: C:\Program Files (x86)\LucasArts\Star Wars Jedi Knight Jedi Academy\GameData

Pozostało 580 znaków

2012-02-16 18:04
1

Dorzuć na pocżatek bata:
cd C:\\Program Files (x86)\\LucasArts\\Star Wars Jedi Knight Jedi Academy\\GameData\\
I będziesz miał pewność, że katalog roboczy będzie w porządku.


Women were the reason I became a monk - and, ah, the reason I switched back...

Pozostało 580 znaków

2012-02-16 18:36
0

No cóż gdy wpisuje w konsoli to co mam w skrypcie, wszystko działa dobrze.
A gdy z PHP:Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\www\RotFpanel\test.php on line 4
W linii 4 jest własnie EXEC polecenia

Pozostało 580 znaków

2012-02-16 18:51
0

Bo nie robisz tego asynchronicznie.


Women were the reason I became a monk - and, ah, the reason I switched back...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0