|
Запуск процессов в Delphi (решено) | ☑ | ||
---|---|---|---|---|
0
Kseniya_
25.06.15
✎
22:46
|
У меня такая проблема. Есть 4 программы, которые должны работать непрерывно, кроме основного результата своей работы, они пишут логи в файлы с текущим днем, все по одному принципу.
Есть программа, которая должна отслеживать каждую минуту, запущены ли все остальные программы, и запускать их. Эта программа работает и тоже пишет логи в файлы, что она запустила. Она получает список процессов, проверяет, есть ли там нужный процесс, и запускает программы. Все это работает, но мной замечено, что в логи программы, запускающей четыре программы, после запуска тех других программ, начинают писаться логи программы 1, 2, 3 и 4, которые никак не связаны с этой папкой, так же, к примеру, в этой папке создаются файлы и папки, которые должны создаться при отсутствии теми другими программами. Будто эти программы запустились внутри не своей папки. Программы я запускаю так (пробовала оба способа): WinExec(PChar(Path1), SW_SHOWNORMAL); или ShellExecute(Handle, 'open', PChar(Path1), nil, nil, SW_SHOWNORMAL); Кто-нибудь сталкивался с такой проблемой? |
|||
1
Zamestas
25.06.15
✎
22:55
|
(0) Попытка
Телепат.Подключить(); ... Телепат успешно подключен. Проблема возникает только у тех процессов (которых 4шт.) которые перезапустил контролирующий процесс? |
|||
2
MMF
25.06.15
✎
22:56
|
ну практически каждый 1С ник сталкивался с таким потоком чистого сознания от бухш.
Если включить телепатию, то в этой мегасистеме при определении имени файла лога нет привязки к каталогу экзешника, а тупо к текущей директории, которую изменяет прога-надзиратель. Самое правильное - ctrl+a shift+delete, но можно и подрихтовать LogFileName := ExtractFilePath(Application.ExeName) + 'Log.txt' |
|||
3
Kseniya_
25.06.15
✎
23:09
|
Спасибо! Да, у тех программ прописан краткий путь. Можно все те программы доработать, чтобы все пути были полными. Или во избежание риска у меня появилась идея программно создать и запустить bat-файл в папке с теми программами для их запуска. Получается я из чужой папки запущу только батник, который заранее сохраню в других папках. И каждую программу запущу только из её папки батником.
|
|||
4
Garykom
гуру
25.06.15
✎
23:15
|
(3) если батник то простое решение cd c:\...
|
|||
5
MMF
25.06.15
✎
23:17
|
(3) идея, конечно, мощная. Но она ничего не изменит :-)
(4) это еще хуже, потому как все логи начнут писаться в корень в опять же один файл (это если прав у прог хватит) |
|||
6
Garykom
гуру
25.06.15
✎
23:20
|
(5) счего? как я понял путь до лога проги берут при запуске по текущему каталогу
если их запускать поочередно меняя тек.каталог на нужный то они будут в свои каталоги писать |
|||
7
Kseniya_
25.06.15
✎
23:21
|
Если исправить проблему с логами и папками полным путем, я просто боюсь, что это этим не закончится, вдруг другие проблемы в работе программ будут того, что меняется директория.
|
|||
8
H A D G E H O G s
25.06.15
✎
23:21
|
"Delphi разработчик"
Хех. |
|||
9
H A D G E H O G s
25.06.15
✎
23:25
|
ShellExecute(Handle, 'open', PChar(Path1), nil, PChar(ExtractFileDir(Path1)), SW_SHOWNORMAL);
|
|||
10
H A D G E H O G s
25.06.15
✎
23:27
|
ShellExecute не рекомендуется пользовать часто на мелкие процессы.
Лучше CreateProcess() http://www.gunsmoker.ru/2015/01/avoid-using-ShellExecuteEx.html |
|||
11
Garykom
гуру
25.06.15
✎
23:31
|
(8) это не мне случайно?
как бы не озвучен способ получения/сохранения полного имени файла лога внутри программ может там берется текущий путь + имя файла лога при запуске, пишется в переменную и дальше юзается переменная? что каждый раз append переоткрываются логи при записи каждой строки это то понятно |
|||
12
H A D G E H O G s
25.06.15
✎
23:32
|
Всем погроммистам рекомендую к чтению блог GunSmoker-а.
Вы его просто будете читать. Потом будете вспоминать, что где -то об этом читали. Потом с радостью находить заново. Потом будете делать закладки. http://www.gunsmoker.ru/2011/04/windows-spin-off.html |
|||
13
MMF
25.06.15
✎
23:34
|
(6) оооо, убивец ТВ :-)
ну ок, тестируем: создаем мега приложение, кидаем на форму надпись и таймер с обработчиком 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
Garykom
гуру
25.06.15
✎
23:35
|
(13) пипец еще один (( см (11)
|
|||
15
Kseniya_
25.06.15
✎
23:37
|
(9) Большое Вам Спасибо! Поняла, неправильно указала параметры функции при запуске, сейчас указала директорию, запустила и все стало работать корректно! Вопрос закрыт.
|
|||
16
H A D G E H O G s
25.06.15
✎
23:37
|
женщины.
|
|||
17
Garykom
гуру
25.06.15
✎
23:38
|
(15) скажи если Вы ручками по отдельности свои 4 проги запускаете по очереди... они правильно логи пишут в свои папки?
|
|||
18
Garykom
гуру
25.06.15
✎
23:39
|
(17)+ в смысле по очереди, заходя в папку каждой, все запустить, одновременно чтобы работали, пишут в один файл тоже?
|
|||
19
H A D G E H O G s
25.06.15
✎
23:39
|
(17) а ты упорный.
Думаю, тебе по силам убивец ТВ. |
|||
20
Garykom
гуру
25.06.15
✎
23:39
|
А то у нас тут маленький спор по телепатическим модулям...
|
|||
21
Zamestas
25.06.15
✎
23:42
|
Переменные окружения процесса родителя передаются всем его потомкам, в т.ч. и текущая директория.
|
|||
22
Kseniya_
25.06.15
✎
23:42
|
(17) Если сама запускаю, то логи пишут в папку, в которой находится исполняемый файл. Тут можно оставить без полного пути.
|
|||
23
Garykom
гуру
25.06.15
✎
23:48
|
(21) дык про bat-ник и cd был спор, по (4) и (8)
|
|||
24
Zamestas
25.06.15
✎
23:54
|
(23) И я о чем - см.(1):
Батником стартуем 4 процесса пусть так c:\proc1\start.exe c:\proc2\start.exe c:\proc3\start.exe c:\proc4\start.exe и до кучи контрольный процесс: c:\control\start.exe в результате работы отлетает c:\proc2\start.exe и c:\control\start.exe его перезапускает со своими переменными окруждения, т.е. для c:\proc2\start.exe текущая директория c:\control в которую он и будет валить логи. |
|||
25
Garykom
гуру
26.06.15
✎
00:08
|
(24) а теперь просто добавь... cd ... между... нужные...
|
|||
26
Zamestas
26.06.15
✎
00:14
|
(25) Подробнее можно?
|
|||
27
romix
26.06.15
✎
00:37
|
(0) Надо посмотреть как дочерние проги ищут свою рабочую папку. Проще всего, если она им передается как параметр командной строки.
ЕМНИП есть еще варианты с передачей папки через параметры Windows. Для полной ясности можно писать больше логов, а если кодом дочерней проги не управляете, то написать вместо нее отладочную программу-пустышку, которая куда-нибудь пишет поступающие ей извне данные. |
|||
28
Kseniya_
26.06.15
✎
00:45
|
(27) Всеми кодами управляю, видела, что пути прописаны краткие, 'logs/...', Почему текущая директория программ менялась на ту, откуда запускалась уже разобралась, по совету (9) указала путь к папке и все уже хорошо работает. А ранее путь к папке программы указан не был в параметре функции, что, видимо, и сломало логику работы. Сейчас проблема уже решена.
|
|||
29
Garykom
гуру
26.06.15
✎
00:47
|
(28) лучше скажи где работаем ;) или для чего оно (учеба)?
|
|||
30
Garykom
гуру
26.06.15
✎
00:48
|
(29)+ в смысле интересно же кто это есчо (в какой конторе) Delphi применяет и зачем? да еще и в родном городе...
|
|||
31
Zamestas
26.06.15
✎
00:51
|
(30) Будете длинными зимними вечерами что нить компилить ? )))
|
|||
32
Kseniya_
26.06.15
✎
00:54
|
(30) Для работы, естественно. Не хочу рассказывать в интернете. Скажем так, эти программы ходят в море.
|
|||
33
Zamestas
26.06.15
✎
00:58
|
(32) И что они там делают (если не секрет)?
|
|||
34
Garykom
гуру
26.06.15
✎
00:58
|
(32) понял, думаю даже общие знакомые есть
|
|||
35
MMF
26.06.15
✎
00:59
|
(33) топят корабли... ну так, иногда.. когда каталоги принимают неверные значения
|
|||
36
Zamestas
26.06.15
✎
01:03
|
(35) Не пали контору - про коста конкордию знаю, морем плавать и так боюсь.
|
|||
37
ЧеловекДуши
26.06.15
✎
06:51
|
(0) Много буковок, мало запятых. Текст не читабелен, особенно утром.
....Код автор не показывает, как он чего отслеживает.. :) ... Я бы порекомендовал создать службу которая в свою очередь запустит 4-ре программки и будет их отслеживать под "ИД" (не помню уже как там оно у форточек). И собственно все :) |
|||
38
ЧеловекДуши
26.06.15
✎
06:51
|
(24) Батник, удел Админа незнающего Делфи :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |