Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Записывается не тот PID (http://forum.oszone.net/showthread.php?t=249370)

dima05605 17-12-2012 20:50 2047548

Записывается не тот PID
 
Доброго времени суток, уважаемые форумчане! Только что столкнулся с проблемой, которой вовсе не должно было произойти. В 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 2047593

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 2047600

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

Foreigner 17-12-2012 22:15 2047625

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

dima05605 17-12-2012 22:19 2047631

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

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

Foreigner 17-12-2012 22:31 2047648

Цитата:

Цитата dima05605
но в файл pid.txt записывается какой-то левый PID »

Сложно сказать. Могу только предположить, если ты запускаешь батник из консоли, то вполне возможно переменная %pid% остается от предыдущего запуска. Проверь в консоли 'set pid' Если так, то после @echo off допиши setlocal:
Код:

@echo off
setlocal

...

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

dima05605 17-12-2012 22:54 2047669

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

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


dima05605 17-12-2012 23:12 2047689

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

Iska 17-12-2012 23:23 2047695

Цитата:

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

Это короткое имя так выглядит. Но интересен путь. Это ведь не «D:\Test\dima\samp-server.exe». Что это — UAC так работает?

Foreigner 17-12-2012 23:23 2047696

А если проосто выполнить:
Код:

wmic process call create "D:\Test\dima\samp-server.exe"
Что будет в консоли? Ты случаем запускаешь не батник завернутый в exe?

dima05605 17-12-2012 23:31 2047703

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


Foreigner 17-12-2012 23:34 2047705

Цитата:

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

Если это скомпилированный батник - samp-server.exe, то exe-обертка отдала свой pid и запустила распакованный батник с другим pid'ом

dima05605 17-12-2012 23:38 2047713

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

Foreigner 17-12-2012 23:44 2047719

Цитата:

Цитата dima05605
это же сервер мультиплеера GTA San Andreas »

Но запускается из C:\Users\Администратор\AppData\Local\Temp\3582-490
Значит он сначала распаковывается во временную папку и потом запускается. Кстати я бы не рискнул запускать, подозрительно как-то. Да еще от Администратора.

dima05605 17-12-2012 23:52 2047725

И как отследить все его распаковки? И зачем ему распаковываться?

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

Iska 18-12-2012 00:46 2047756

Цитата:

Цитата dima05605
И как отследить все его распаковки? И зачем ему распаковываться? »

Process Monitor.

dima05605 18-12-2012 18:27 2048219

Цитата:

Цитата Iska
Process Monitor. »

И?

Iska 18-12-2012 18:51 2048236

Цитата:

Цитата dima05605
И? »

как отследить процесс - Поиск в Google.

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

dima05605 18-12-2012 19:50 2048263

Ну так я смогу отследить не один процесс, а много и автоматически. Если бы этого не надо было, то я бы вручную запускал проги

dima05605 18-12-2012 20:11 2048280

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

Foreigner 18-12-2012 20:44 2048303

Цитата:

Цитата dima05605
При запуске ехе файла, записывается неправильный PID. В чем проблема? »

Я же написал тебе. Повторю. То, что ты запускаешь, отдает PID батнику, распаковывает исполняемый файл во временную папку, запускает его и заканчивает свою работу. Поэтому у тебя нет процесса с нужным идентификатором. Запусти tasklist и просмотри список процессов. Не поленись заглянуть во временную папку, возможно там есть что-то подозрительное.

dima05605 18-12-2012 21:23 2048335

Ладно. Спасибо и на том.

Iska 18-12-2012 23:54 2048434

Цитата:

Цитата dima05605
Ну так я смогу отследить не один процесс, а много и автоматически. Если бы этого не надо было, то я бы вручную запускал проги »

Был вопрос:
Цитата:

Цитата dima05605
И как отследить все его распаковки? И зачем ему распаковываться? »

Я Вам написал, чем и как. Это нужно для того, чтобы явно найти взаимосвязь между тем процессом, что Вы запускаете, и тем, который наблюдается. На мой взгляд, коллега Foreigner высказал вполне разумное предположение. Проверить его, чтобы попытаться двигаться дальше, можете Вы. Но почему-то не хотите.


Время: 02:54.

Время: 02:54.
© OSzone.net 2001-