Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/47: Рейтинг темы: голосов - 47, средняя оценка - 4.91
10 / 10 / 3
Регистрация: 18.08.2015
Сообщений: 86

Отследить завершение процесса программы

10.01.2016, 01:59. Показов 8961. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Роюсь-роюсь, никак не дороюсь.
Запускаю программу, появляется процесс. (логично)
Хочу иметь возможность как-то отследить принудительное завершение процесса программы. Ну или хотя бы просто завершение процесса... Никак не удаётся.
Кто может подсказать: что надо написать, чтобы было событие на завершение процесса программы?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.01.2016, 01:59
Ответы с готовыми решениями:

Отследить завершение процесса
Программа должна следить за работой процесса, например notepad.exe. Если этот процесс завершается, то выполняется какой-то код. Не...

Как отследить завершение запущенного процесса
Здравствуйте. Подскажите как отследить завершение процесса p? System.Diagnostics.Process p = new System.Diagnostics.Process(); ...

Как отследить время работы программы/процесса?
как отследить работу не моей программы , а программы на OC windows или сколько работает процесс/служба?

14
10 / 10 / 3
Регистрация: 18.08.2015
Сообщений: 86
11.01.2016, 18:27  [ТС]
неужели нет ответа?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
11.01.2016, 18:52
Цитата Сообщение от lighty94 Посмотреть сообщение
что надо написать, чтобы было событие на завершение процесса программы?
Событие Application.Exit.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18291 / 14214 / 5368
Регистрация: 17.03.2014
Сообщений: 28,891
Записей в блоге: 1
11.01.2016, 19:52
lighty94, см. событие Process.Exited
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
11.01.2016, 20:10
Цитата Сообщение от OwenGlendower Посмотреть сообщение
см. событие Process.Exited
А разве это сработает для текущего процесса? По-моему - нет.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18291 / 14214 / 5368
Регистрация: 17.03.2014
Сообщений: 28,891
Записей в блоге: 1
11.01.2016, 20:13
Storm23, для текущего конечно нет, но мне кажется что ТСу требуется отследить завершение другой программы. Возможно я ошибаюсь.
0
10 / 10 / 3
Регистрация: 18.08.2015
Сообщений: 86
11.01.2016, 22:39  [ТС]
OwenGlendower, увы, ошибаетесь.
пытаюсь отловить завершение своей программы, например из диспетчера. чтобы сделать соответствующую запись в лог.

Добавлено через 4 минуты
Storm23, не особо-то понимаю.
на "ExitEventArgs e" ругается vs.
не пойму что именно из всего этого мне надо.

Добавлено через 6 минут
Storm23, ругается даже на это:
protected virtual void OnExit(ExitEventArgs e)
(с msdn)

Добавлено через 3 минуты
using System.Windows;
тоже стоит.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18291 / 14214 / 5368
Регистрация: 17.03.2014
Сообщений: 28,891
Записей в блоге: 1
11.01.2016, 23:05
Цитата Сообщение от lighty94 Посмотреть сообщение
увы, ошибаетесь. пытаюсь отловить завершение своей программы
Ок. Тогда, раз у тебя Windows Forms, то используй событие Application.ApplicationExit или AppDomain.ProcessExit.

Цитата Сообщение от lighty94 Посмотреть сообщение
например из диспетчера.
Ранее приведенные события должны сработать и в этом случае. При условии что программа не подвисла.
1
10 / 10 / 3
Регистрация: 18.08.2015
Сообщений: 86
11.01.2016, 23:18  [ТС]
OwenGlendower, а при подвисании можно что сделать?

Добавлено через 3 минуты
OwenGlendower, на Application.Restart() это работает?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18291 / 14214 / 5368
Регистрация: 17.03.2014
Сообщений: 28,891
Записей в блоге: 1
11.01.2016, 23:23
Цитата Сообщение от lighty94 Посмотреть сообщение
а при подвисании можно что сделать?
В моем понимании из самой программы нет. Только снаружи. Возможно Убежденный что-то сможет подсказать.

Цитата Сообщение от lighty94 Посмотреть сообщение
на Application.Restart() это работает?
Не проверял, но не вижу причин чтобы не работало.
0
10 / 10 / 3
Регистрация: 18.08.2015
Сообщений: 86
11.01.2016, 23:48  [ТС]
OwenGlendower, правда, не совсем понятно как с этим работать.
итак, стоит:

C#
1
public event EventHandler ProcessExit
C#
1
public event EventHandler ProcessExit
и туда, и туда, просит add remove.
далее что? к моим функциям не хочет получить доступ.

Добавлено через 17 минут
OwenGlendower, немного разобрался.
Application.ApplicationExit не подходит. он срабатывает при "нормальном" закрытии программы.
а вот ProcessExit - никак не подключу.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
12.01.2016, 00:04
Лучший ответ Сообщение было отмечено lighty94 как решение

Решение

Цитата Сообщение от lighty94 Посмотреть сообщение
а вот ProcessExit - никак не подключу.
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void Form1_Load(object sender, EventArgs e)
{
    AppDomain.CurrentDomain.ProcessExit += new EventHandler(WriteExitLog);
}
 
void WriteExitLog(object sender, EventArgs e)
{
    using (TextWriter fs = new StreamWriter(fileName, true, Encoding.Default))
    {
        fs.WriteLine("Exit: {0}", DateTime.Now);
    }
}
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18291 / 14214 / 5368
Регистрация: 17.03.2014
Сообщений: 28,891
Записей в блоге: 1
12.01.2016, 00:05
Лучший ответ Сообщение было отмечено lighty94 как решение

Решение

lighty94, добавляешь в класс Program метод
C#
1
2
3
4
static void HandleAppExit(object sender, EventArgs e)
{
    // Обработчик события Application.ApplicationExit
}
В функции Main первой строкой ставишь код
C#
1
Application.ApplicationExit += HandleAppExit;
1
10 / 10 / 3
Регистрация: 18.08.2015
Сообщений: 86
12.01.2016, 00:47  [ТС]
разобрался вроде бы. если кому интересно будет:
в Program.cs перед строчкой:
C#
1
Application.Run
вставляем:
C#
1
AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit);
и добавляем после:
C#
1
2
3
4
static void Main()
{
//что тут у Вас
}
это:
C#
1
2
3
4
static void CurrentDomain_ProcessExit(object sender, EventArgs e)
        {
            //запись лога, например.
        }
при завершении процесса, конечно, не срабатывает...
но срабатывает при всех без исключения выхода из программы. (в т.ч. в случае ошибке вне "try")
0
0 / 0 / 0
Регистрация: 17.04.2018
Сообщений: 13
24.01.2019, 15:34
ссылка на код lighty94 https://stackoverflow.com/ques... exit-event
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2019, 15:34
Помогаю со студенческими работами здесь

Отследить запуск и завершение приложений
Программа при запуске показывает активно ли конкретное приложение (пр. калькулятор), если оно активно, то показывает label1, если нет -...

Завершение выбранного процесса
Всем привет. Задание такое: На виндовс форме мне надо вывести список прикладных процессов, выбрать какой-то один из них и завершить его. ...

Завершение процесса в диспетчере задач
Подскажите, как сделать так, чтобы при закрытии программы завершался процесс в диспетчере задач? Функционал программы предполагает...

Перехват запуска процесса и его завершение
Всем привет! Я пишу программу на c# и возник следующий вопрос: как сделать, что бы когда программа включена, работал "перехватчик...

Принудительное завершение процесса по нажатию кнопки
Всем привет! У меня такой вопрос, вот я пишу программку для принудительного завершения процесса wininit.exe по нажатию кнопки на форме, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru