Запуск процессов в Delphi (решено) #746369


#0 by Kseniya_
У меня такая проблема. Есть 4 программы, которые должны работать непрерывно, кроме основного результата своей работы, они пишут логи в файлы с текущим днем, все по одному принципу. Есть программа, которая должна отслеживать каждую минуту, запущены ли все остальные программы, и запускать их. Эта программа работает и тоже пишет логи в файлы, что она запустила. Она получает список процессов, проверяет, есть ли там нужный процесс, и запускает программы. Все это работает, но мной замечено, что в логи программы, запускающей четыре программы, после запуска тех других программ, начинают писаться логи программы 1, 2, 3 и 4, которые никак не связаны с этой папкой, так же, к примеру, в этой папке создаются файлы и папки, которые должны создаться при отсутствии теми другими программами. Будто эти программы запустились внутри не своей папки. Программы я запускаю так (пробовала оба способа): WinExec(PChar(Path1), SW_SHOWNORMAL); или ShellExecute(Handle, 'open', PChar(Path1), nil, nil, SW_SHOWNORMAL); Кто-нибудь сталкивался с такой проблемой?
#1 by Zamestas
Попытка    Телепат.Подключить; ... Телепат успешно подключен. Проблема возникает только у тех процессов (которых 4шт.) которые перезапустил контролирующий процесс?
#2 by MMF
ну практически каждый 1С ник сталкивался с таким потоком чистого сознания от бухш. Если включить телепатию, то в этой мегасистеме при определении имени файла лога нет привязки к каталогу экзешника, а тупо к текущей директории, которую изменяет прога-надзиратель. Самое правильное - ctrl+a shift+delete, но можно и подрихтовать LogFileName := ExtractFilePath(Application.ExeName) + 'Log.txt'
#3 by Kseniya_
Спасибо! Да, у тех программ прописан краткий путь. Можно все те программы доработать, чтобы все пути были полными. Или во избежание риска у меня появилась идея программно создать и запустить bat-файл в папке с теми программами для их запуска. Получается я из чужой папки запущу только батник, который заранее сохраню в других папках. И каждую программу запущу только из её папки батником.
#4 by Garykom
если батник то простое решение cd c:...
#5 by MMF
идея, конечно, мощная. Но она ничего не изменит :-) это еще хуже, потому как все логи начнут писаться в корень в опять же один файл (это если прав у прог хватит)
#6 by Garykom
счего? как я понял путь до лога проги берут при запуске по текущему каталогу если их запускать поочередно меняя тек.каталог на нужный то они будут в свои каталоги писать
#7 by Kseniya_
Если исправить проблему с логами и папками полным путем, я просто боюсь, что это этим не закончится, вдруг другие проблемы в работе программ будут того, что меняется директория.
#8 by H A D G E H O G s
"Delphi разработчик" Хех.
#9 by H A D G E H O G s
ShellExecute(Handle, 'open', PChar(Path1), nil, PChar(ExtractFileDir(Path1)), SW_SHOWNORMAL);
#10 by H A D G E H O G s
ShellExecute не рекомендуется пользовать часто на мелкие процессы. Лучше CreateProcess
#11 by Garykom
это не мне случайно? как бы не озвучен способ получения/сохранения полного имени файла лога внутри программ может там берется текущий путь + имя файла лога при запуске, пишется в переменную и дальше юзается переменная? что каждый раз append переоткрываются логи при записи каждой строки это то понятно
#12 by H A D G E H O G s
Всем погроммистам рекомендую к чтению блог GunSmoker-а. Вы его просто будете читать. Потом будете вспоминать, что где -то об этом читали. Потом с радостью находить заново. Потом будете делать закладки.
#13 by MMF
оооо, убивец ТВ :-) ну ок, тестируем: создаем мега приложение, кидаем на форму надпись и таймер с обработчиком procedure TForm1.Timer1Timer(Sender: TObject); begin   label1.Caption := GetCurrentDir; end; создаем два каталога "1" и "2" и ложим в каждый по экземпляру экзешника создаем батник: cd d:1 start project1.exe cd d:2 start project1.exe наблюдаем, ясен пень, две формы с одинаковым каталогом
#14 by Garykom
пипец еще один (( см
#15 by Kseniya_
Большое Вам Спасибо! Поняла, неправильно указала параметры функции при запуске, сейчас указала директорию, запустила и все стало работать корректно! Вопрос закрыт.
#16 by H A D G E H O G s
женщины.
#17 by Garykom
скажи если Вы ручками по отдельности свои 4 проги запускаете по очереди... они правильно логи пишут в свои папки?
#18 by Garykom
+ в смысле по очереди, заходя в папку каждой, все запустить, одновременно чтобы работали, пишут в один файл тоже?
#19 by H A D G E H O G s
а ты упорный. Думаю, тебе по силам убивец ТВ.
#20 by Garykom
А то у нас тут маленький спор по телепатическим модулям...
#21 by Zamestas
Переменные окружения процесса родителя передаются всем его потомкам, в т.ч. и текущая директория.
#22 by Kseniya_
Если сама запускаю, то логи пишут в папку, в которой находится исполняемый файл. Тут можно оставить без полного пути.
#23 by Garykom
дык про bat-ник и cd был спор, по и
#24 by Zamestas
И я о чем - см.: Батником стартуем 4 процесса пусть так c:proc1start.exe c:proc2start.exe c:proc3start.exe c:proc4start.exe и до кучи контрольный процесс: c:controlstart.exe в результате работы отлетает c:proc2start.exe и c:controlstart.exe его перезапускает со своими переменными окруждения, т.е. для c:proc2start.exe текущая директория c:control в которую он и будет валить логи.
#25 by Garykom
а теперь просто добавь... cd ... между... нужные...
#26 by Zamestas
Подробнее можно?
#27 by romix
Надо посмотреть как дочерние проги ищут свою рабочую папку. Проще всего, если она им передается как параметр командной строки. ЕМНИП есть еще варианты с передачей папки через параметры Windows. Для полной ясности можно писать больше логов, а если кодом дочерней проги не управляете, то написать вместо нее  отладочную программу-пустышку, которая куда-нибудь пишет поступающие ей извне данные.
#28 by Kseniya_
Всеми кодами управляю, видела, что пути прописаны краткие, 'logs/...', Почему текущая директория программ менялась на ту, откуда запускалась уже разобралась, по совету указала путь к папке и все уже хорошо работает. А ранее путь к папке программы указан не был в параметре функции, что, видимо, и сломало логику работы. Сейчас проблема уже решена.
#29 by Garykom
лучше скажи где работаем ;) или для чего оно (учеба)?
#30 by Garykom
+ в смысле интересно же кто это есчо (в какой конторе) Delphi применяет и зачем? да еще и в родном городе...
#31 by Zamestas
Будете длинными зимними вечерами что нить компилить ? )))
#32 by Kseniya_
Для работы, естественно. Не хочу рассказывать в интернете. Скажем так, эти программы ходят в море.
#33 by Zamestas
И что они там делают (если не секрет)?
#34 by Garykom
понял, думаю даже общие знакомые есть
#35 by MMF
топят корабли... ну так, иногда.. когда каталоги принимают неверные значения
#36 by Zamestas
Не пали контору - про коста конкордию знаю, морем плавать и так боюсь.
#37 by ЧеловекДуши
Много буковок, мало запятых. Текст не читабелен, особенно утром. ....Код автор не показывает, как он чего отслеживает.. :) ... Я бы порекомендовал создать службу которая в свою очередь запустит 4-ре программки и будет их отслеживать под "ИД" (не помню уже как там оно у форточек). И собственно все :)
#38 by ЧеловекДуши
Батник, удел Админа незнающего Делфи :)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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