Войти

Показать полную графическую версию : [решено] Записывается не тот PID


Страниц : [1] 2

dima05605
17-12-2012, 20:50
Доброго времени суток, уважаемые форумчане! Только что столкнулся с проблемой, которой вовсе не должно было произойти. В pid.txt записывается не верный PID, то есть у процесса, который запуститься с этого кода, будет совсем другой PID по сравнению с записанным. В exfile.txt лежит файл, который надо запустить, в con_login.txt лежит путь к файлу.
Вот код:

@echo off
:begin
ping -n 2 127.0.0.1 > NUL
if not exist start_server.txt goto :begin else goto :start_server

:start_server

Set file=exfile.txt
For /F "usebackq tokens=* delims=" %%i In ("%file%") Do Set exf=%%i

Set file=con_login.txt
For /F "usebackq tokens=* delims=" %%i In ("%file%") Do Set conlogin=%%i
set conlogin=%conlogin: =%

echo %conlogin%\%exf%

set "wmic=wmic process call create "%conlogin%\%exf%" | findstr "ProcessId""
for /f "tokens=2 delims==;" %%i in ('"%wmic%"') do set "pid=%%i"
del start_server.txt

echo %pid% > pid.txt
goto :begin

Foreigner
17-12-2012, 21:45
dima05605, Не ясно, соответствует ли "%conlogin%\%exf%" файлу "D:\Test\dima\samp-server.exe" ? Наверное будет правильней:

set "wmic=wmic process call create "%conlogin%\%exf%" | findstr "ProcessId""

dima05605
17-12-2012, 21:51
Вместо "D:\Test\dima\samp-server.exe" можно написать "%conlogin%\%exf%, но, будет писаться не правильный PID.

Foreigner
17-12-2012, 22:15
dima05605, А start_server.txt откуда берется? Может у тебя просто запускается несколько экземпляров samp-server.exe и ты смотришь не тот PID?

dima05605
17-12-2012, 22:19
start_server.txt появляется по команде, сам же батник проверяет наличие этого файла. Если существует start_server.txt, значит выполнить действие. Вообще все работает, когда появляется этот txt файл, то запускается samp-server.exe, все вроде бы ок, но в файл pid.txt записывается какой-то левый PID

Врядли чтобы запускалось несколько экземпляров, я даже не могу представить как такое может быть?

Foreigner
17-12-2012, 22:31
но в файл pid.txt записывается какой-то левый PID »
Сложно сказать. Могу только предположить, если ты запускаешь батник из консоли, то вполне возможно переменная %pid% остается от предыдущего запуска. Проверь в консоли 'set pid' Если так, то после @echo off допиши setlocal:

@echo off
setlocal

...

Тогда переменные будут жить только в пределах исполнения этого батника.

dima05605
17-12-2012, 22:54
setlocal не решил проблему. PID записывается, но не тот, что надо :) То есть надо чтобы записывался PID дочерней программы, а пишется несуществующий

А ничего что вверху такие вот кракозябры?

http://s005.radikal.ru/i212/1212/39/30550e510e43.jpg

dima05605
17-12-2012, 23:12
И самое интересное это то, что с BAT файлами все ок, PID'ы пишутся правильные и по команде все работает идеально. Вот с ехе не хочет.

Iska
17-12-2012, 23:23
А ничего что вверху такие вот кракозябры? »
Это короткое имя так выглядит. Но интересен путь. Это ведь не «D:\Test\dima\samp-server.exe». Что это — UAC так работает?

Foreigner
17-12-2012, 23:23
А если проосто выполнить:

wmic process call create "D:\Test\dima\samp-server.exe"

Что будет в консоли? Ты случаем запускаешь не батник завернутый в exe?

dima05605
17-12-2012, 23:31
Запустил через консоль, samp-server.exe запущен, ProcessId = 2488. Написав taskkill /PID 2488 написало что нету такого процесса :D

http://s05.radikal.ru/i178/1212/4b/9e273661fa56.jpg

Foreigner
17-12-2012, 23:34
апустил через консоль, samp-server.exe запущен, ProcessId = 2488. Написав taskkill /PID 2488 написало что нету такого процесса :D »
Если это скомпилированный батник - samp-server.exe, то exe-обертка отдала свой pid и запустила распакованный батник с другим pid'ом

dima05605
17-12-2012, 23:38
Не знаю на чем написан samp-server.exe. Но не думаю что на bat, это же сервер мультиплеера GTA San Andreas

Foreigner
17-12-2012, 23:44
это же сервер мультиплеера GTA San Andreas »
Но запускается из C:\Users\Администратор\AppData\Local\Temp\3582-490
Значит он сначала распаковывается во временную папку и потом запускается. Кстати я бы не рискнул запускать, подозрительно как-то. Да еще от Администратора.

dima05605
17-12-2012, 23:52
И как отследить все его распаковки? И зачем ему распаковываться?

Кстати если вручную запустить samp-server.exe, то тех "кракозябр" в тайтле окна нету.

Iska
18-12-2012, 00:46
И как отследить все его распаковки? И зачем ему распаковываться? »
Process Monitor (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx).

dima05605
18-12-2012, 18:27
Process Monitor. »

И?

Iska
18-12-2012, 18:51
И? »
как отследить процесс - Поиск в Google (https://www.google.ru/search?q=%D0%BA%D0%B0%D0%BA+%D0%BE%D1%82%D1%81%D0%BB%D0%B5%D0%B4%D0%B8%D1%82%D1%8C+%D0%BF%D1%80%D0%B E%D1%86%D0%B5%D1%81%D1%81).

Первая ссылка — на само приложение. Вторая — на этот форум. Третья — на блог Вадима.

dima05605
18-12-2012, 19:50
Ну так я смогу отследить не один процесс, а много и автоматически. Если бы этого не надо было, то я бы вручную запускал проги

dima05605
18-12-2012, 20:11
Опишу проблему заново: есть код, который запускает программу, и записывает ее PID в файл. При запуске ехе файла, записывается неправильный PID. В чем проблема?




© OSzone.net 2001-2012