Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2008, 12:04   #1
Ramires
Пользователь
 
Аватар для Ramires
 
Регистрация: 23.07.2008
Сообщений: 69
По умолчанию Можно ли после аварийного закрытия приложения внести/удалить запись из файла

Подскажите пожалуйста.
Суть такая. Приложение ведет сетевой лог. Программу закрываешь запись из лога удаляется, но если аварийно закрыть прогу через ctrl alt delete запись в логе остается. Можно ли как то убирать ее или это не реал?
I like beer.. more beer..
Ramires вне форума Ответить с цитированием
Старый 04.08.2008, 16:10   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

На мой взгляд будет самый простой способ написать маленькую программку, которая следила бы за первой программой и при завершении первой программы удаляла запись из лога.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 04.08.2008, 16:50   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что Лог этот жутко мешает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.08.2008, 17:46   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Логи можно почистить при следующем запуске этой программы.
Arigato вне форума Ответить с цитированием
Старый 05.08.2008, 14:13   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

В принципе это реально. Terran уже сказал как это можно сделать.
Многие программы определяют свое аварийное завершение и предлагают перезапустить (автоматически) или отправить отчет. Сами они, понятно, этого сделать не могут, значит нужен процесс к-рый будет следить "со стороны".
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 05.08.2008, 16:23   #6
DearHunter
Пользователь
 
Регистрация: 30.07.2008
Сообщений: 14
По умолчанию

Ctrl-alt-delete - не единственный способ завершения программы внешними средствами.

1. Для обработки штатного завершения - обработать WM_CLOSE и WM_SYSCOMMAND c SC_CLOSE в главном окне программы (дельфи делает это сама).
2. Для обработки вызова ExitProcess - добавить динамическую библиотеку к проекту, и в ней обработать DLL_PROCESS_DETACH.
3. Для обработки вызова TerminateProcess - установить хук на вызов TerminateProcess в менеджер задач (в частности) путем внедрения библиотеки.
4. Для обработки завершения из-за ошибки времени исполнения - использовать SetWindowsHookEx.

Как предложено terran-ом, проще написать следящую программу, однако она также может быть завершена из менеджера задач.

Правильнее было бы понять, для чего используется эта запись в логе, чтобы выбрать верное решение.
DearHunter вне форума Ответить с цитированием
Старый 05.08.2008, 16:32   #7
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Прежде чем продать что- то ненужное, надо купить что- то ненужное (c)
если вам надо удалить строку из лога при выходе из программы, то на 90% это строка пишется в лог невовремя. Скорее всего это алгоритмическая ошибка.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 06.08.2008, 08:44   #8
Ramires
Пользователь
 
Аватар для Ramires
 
Регистрация: 23.07.2008
Сообщений: 69
По умолчанию

Ну во первых большое спасибо что обратили внимание.
Объясню немного суть самой проги. В программе есть несколько групп пользователей: админы и просто юзеры.
Программа лежит сама на серваке.
Я занимаюсь разработкой новых версий этой программы. И вот в процесс когда мне нужно заменить версию проги на новую всегда возникают проблемы, из-за того что кто-нибудь вечно в ней сидит, а зачастую бывает даже так что юзер запустит прогу и свалит домой.
Естесственно я могу к некоторым зайти через радмин и кильнуть сессию, однако политика моих прав распространяется не на все компьютеры пользователей, для чего я создал монитор пользователей который ведет лог, в котором отображаются нужные мне данные о юзере. И тогда я могу делать следующее: 1) заходить через радмин по айпи и килять. 2) если не моя зона прав звонить сисадмину и килять 3) отправлять по почте мессагу.
И 4, а 4 это есть следующее (что я сейчас и делаю): я кидаю в файл на серве команду, программа считывает команду и закрывает ее.
И вот для всех этих манипуляций мне и нужен нормальный монитор.
Проблему ctrl alt delete я в принципе победил. Определенный промежуток времени программа в логе затирает инфу на более новую, и если промежуток времени между сеансами стал критичным.. то в мониторе отобразится инфа о прерывании..
I like beer.. more beer..

Последний раз редактировалось Ramires; 06.08.2008 в 08:47.
Ramires вне форума Ответить с цитированием
Старый 06.08.2008, 09:37   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы подумал над двумя вариантами:
1. Прога сама в ДЛЛ находится (ядро) Когда приходит новая версия exeшник выдает сообщение пользователю - мол обнови. если пользователь кликает ДА то прога качает себе в особую папку на хост ДЛЛ и перезагружает (или просто закрывается)

2. Этот вариант использую я сам. Прога прогой, но новую версию я и называю по другому. Старая даже если работает - ее дни сочтены.
А все потому что я пользуюсь методом двойных ярлыков.
Тут все просто Я кладу Экзешник на сервак, делаю на него линк, и делаю Линк на этот линк. Второй линк раскидываю по хостам.
Таким образом дабы заменить прогу мне просто нужно подправить в первом линке имя файла, автоматом при следующем запуске линк на хостах обратится к поправленному линку, который и запустит обновку )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.08.2008, 10:38   #10
Ramires
Пользователь
 
Аватар для Ramires
 
Регистрация: 23.07.2008
Сообщений: 69
По умолчанию

Stilet, ты по праву Заслуженный Модератор! Спасибо большущее!
Второй метод супер!
I like beer.. more beer..
Ramires вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли внести изменения в файл с расширением .exe Sanlev Помощь студентам 12 08.02.2010 15:49
запись в файл при закрытии в приложения SERG1980 Общие вопросы Delphi 5 14.11.2007 08:08
Как сделать чтобы динамически созданные объекты оставались после закрытия формы? AHAPXUCT2007 Общие вопросы Delphi 7 28.09.2007 08:46
ошибка, после того как я создал запись 'fayl' ZhekON Общие вопросы Delphi 15 01.04.2007 13:39
как удалить нужную запись из БД doncova1 БД в Delphi 4 20.12.2006 23:35