#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-файл в папке с теми программами для их запуска. Получается я из чужой папки запущу только батник, который заранее сохраню в других папках. И каждую программу запущу только из её папки батником.
#5
by MMF
идея, конечно, мощная. Но она ничего не изменит :-) это еще хуже, потому как все логи начнут писаться в корень в опять же один файл (это если прав у прог хватит)
#6
by Garykom
счего? как я понял путь до лога проги берут при запуске по текущему каталогу если их запускать поочередно меняя тек.каталог на нужный то они будут в свои каталоги писать
#7
by Kseniya_
Если исправить проблему с логами и папками полным путем, я просто боюсь, что это этим не закончится, вдруг другие проблемы в работе программ будут того, что меняется директория.
#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 наблюдаем, ясен пень, две формы с одинаковым каталогом
#15
by Kseniya_
Большое Вам Спасибо! Поняла, неправильно указала параметры функции при запуске, сейчас указала директорию, запустила и все стало работать корректно! Вопрос закрыт.
#17
by Garykom
скажи если Вы ручками по отдельности свои 4 проги запускаете по очереди... они правильно логи пишут в свои папки?
#18
by Garykom
+ в смысле по очереди, заходя в папку каждой, все запустить, одновременно чтобы работали, пишут в один файл тоже?
#21
by Zamestas
Переменные окружения процесса родителя передаются всем его потомкам, в т.ч. и текущая директория.
#22
by Kseniya_
Если сама запускаю, то логи пишут в папку, в которой находится исполняемый файл. Тут можно оставить без полного пути.
#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 в которую он и будет валить логи.
#27
by romix
Надо посмотреть как дочерние проги ищут свою рабочую папку. Проще всего, если она им передается как параметр командной строки. ЕМНИП есть еще варианты с передачей папки через параметры Windows. Для полной ясности можно писать больше логов, а если кодом дочерней проги не управляете, то написать вместо нее отладочную программу-пустышку, которая куда-нибудь пишет поступающие ей извне данные.
#28
by Kseniya_
Всеми кодами управляю, видела, что пути прописаны краткие, 'logs/...', Почему текущая директория программ менялась на ту, откуда запускалась уже разобралась, по совету указала путь к папке и все уже хорошо работает. А ранее путь к папке программы указан не был в параметре функции, что, видимо, и сломало логику работы. Сейчас проблема уже решена.
#30
by Garykom
+ в смысле интересно же кто это есчо (в какой конторе) Delphi применяет и зачем? да еще и в родном городе...
#32
by Kseniya_
Для работы, естественно. Не хочу рассказывать в интернете. Скажем так, эти программы ходят в море.
#37
by ЧеловекДуши
Много буковок, мало запятых. Текст не читабелен, особенно утром. ....Код автор не показывает, как он чего отслеживает.. :) ... Я бы порекомендовал создать службу которая в свою очередь запустит 4-ре программки и будет их отслеживать под "ИД" (не помню уже как там оно у форточек). И собственно все :)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Возможен ли такой автоматический запуск обработки при запуске прогркммы?
- Запуск 1С-ки автоматом и автоматом запуск нужной обработки
- Запуск 1С-ки автоматом и автоматом запуск нужной обработки
- bat-файл. Запуск 1С 8.0 УТ - запуск обмена.
- Запуск и остановка процессов
- Запуск обработки (внешней) при запуске 1с
- Запуск веб-клиента с параметрами запуска
- Запуск обработки при запуске базы БП 3.0
- Delphi class abstract (версия Delphi XE7)
- Циклится запуск bat при запуске из 1С
В этой группе 1С
- Имеет смысл юзать толстого клиента без RDP ?
- Работа с претензиями и возвратами в 1С:УПП
- Перестала запускаться 1С на терминальном сервере 2008.
- Управление видимостью реквизитов управляемой формы
- Проведение документа в БУ
- 1С 8.3 РИБ Обмен - Ошибка формата представления изменений
- Обмен БП2.0-УТ11
- Как определить какой элемент УФ виден пользователю?
- БП 3.0 Фамилия+Инициалы пользователя
- Печать из внешней обработки (не внешней печатной формы) средствами БСП
- Размер базы 1CD УТ10.3
- УПП 1.3 РАУЗ косвенные расходы и анализ состояния НУ
- 8.3. Пометка на удаление справочника-владельца помечает на удаление подчиненные
- Контрагент отсутствует в базе ФНС
- bat файл запускающий службы
- ЗУП 2.5 Регистр "Состояние сотрудников организаций" и док. "Неявки и болезни"
- Штатное расписание организации ЗУП 2.5 как вывести подразделение в иерархии?
- ИнтернетПочта. получить только непрочитанные письма
- Подключение Масса-К к 1С УТ 11
- Не работает интерактивный поиск в 1С УТ .8.3