Народ, кто может подсказать как в Delphi получить PID вновь созданного процесса? #528563


#0 by Admin_Net_1C
Есть самописная программулина, которая висит на прокси и с заданной периодичность считывает почту с указанных почтовых ящиков и запускает 1С 7.7 для обработки полученных файлов. В один момент может запскаться несколько экземпляров 1С в разных потоках с помощью следующего кода: procedure TThread1C.Execute; ... try CoInitializeEx(nil,COINIT_APARTMENTTHREADED); mProgV77 := CreateOleObject('v77s.Application'); mresult := mProgV77.Initialize(mProgV77.RMTrade, ComandLine,'NO_SPLASH_SHOW'); except on E: EOleError do frmMain.Memo1.Lines.Add('**** Ошибка: ' + E.Message); end; if mresult then begin try mresult := mProgV77.EvalExpr('OpenForm("Отчет","' + FSprSotr_ID + '","' + mPathERT + '")'); except on E: EOleError do frmMain.Memo1.Lines.Add('**** Ошибка: ' + E.Message); end; end; coUnInitialize; ... end; Вопрос, возможно ли каким то образом в данной процедуре получить PID запущенного процесса 1С?
#1 by milan
Собери все процессы 1Сv7 до запуска по оле и после, наверное сразу будет видно кто новенький ;)
#2 by Admin_Net_1C
думал уже, как вариант, да. Проще никак, чтобы сразу вновь запущенного процесса?
#3 by milan
Может какой хук повесить на систему, или запускать не оле, а сразу процесс
#4 by Admin_Net_1C
а каким образом можно запустить сразу процесс с вызовом обработки 1С с указанными параметрами?
#5 by miki
может ShellExecuteEx поможет: ?
#6 by milan
в 1с при начале работы системы в зависимости от пользователя и параметров запуска что-то делать.
#7 by Admin_Net_1C
спасибо, изучаю не вариант
#8 by smaharbA
передать из адинесы пойдет ?
#9 by Admin_Net_1C
всем спасибо, сделал через сравнение списка процессов до и после старта 1С
#10 by H A D G E H O G s
Я делал через глобальную переменную общего модуля
#11 by smaharbA
Косячно не надо глобальной переменной
#12 by smaharbA
а вообще из делфи думаю список дочерних процессов получить не сложно и позырить какой из оных адинес и имеет параметр -Embedding
#13 by Admin_Net_1C
самый правильный вариант, только у меня на строке: service:=locator.ConnectServer('.','root\cimv2'); вываливается ошибка: EOLEException Сервер RPC недоступен хотя служба "Удаленный вызов процедур (RPC)" запущена и работает Может еще подскажешь, что не так? не настолько глубоко владею программированием в API (
#14 by Admin_Net_1C
+ можно к тебе в аську стукнуться, пообщаться?
#15 by MMF
клевый код... в потоке обращаться к vcl do frmMain.Memo1.Lines без всяких там Synchronize...
#16 by MMF
var dw1CPID: DWORD; mProgV77 := CreateOleObject('v77s.Application') OleCheck(CoGetServerPID(mProgV77, dw1CPID));
#17 by MMF
(16+) CoGetServerPID качни тут
#18 by smaharbA
Миша, а он не будет дочерним что ли ? хотя в васике (не скрипт) тоже не дочерний :(
#19 by smaharbA
вместо точки попытайся 'localhost' или Null (ну или что там есть в делфях)
#20 by H A D G E H O G s
Спасибо тебе.
#21 by Admin_Net_1C
, спасибо, в понедельник попробую
#22 by Admin_Net_1C
MMF спасибо, работает, правда только на х32 платформе. У меня на моем компе Win 7 x64 Ultimate и CoGetServerPID(mProgV77, dw1CPID) возвращает 65535. Но это уже мелочи, главное что на прокси Win 2003 x32 и все работает )
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С