• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Как Перехватить Закрытие Windows-приложения Без Формы?

  • Автор темы Tolias
  • Дата начала
T

Tolias

Я на C# создал приложение, выбрав проект WindowsForms. Но так как моя программа не должна иметь никаких окон, я удалил Form1.cs, а код своей программы поместил в функции Main() типа так:
<!--shcode--><pre><code class='c#'>static void Main()
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "C:\\";
watcher.NotifyFilter = NotifyFilters.LastAccess;
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);

Application.SetCompatibleTextRenderingDefault(false);
Application.Run();
}[/CODE]
после Мейна идут фукнции-обработчики событий, который пишут все в текстовый файл.
Мне надо так сделать, чтобы при выключении компьютера, когда система посылает всем программам команду закрыться, чтобы в этот момент моя программа перед своим закрытием сбрасывала содержимое всех буферов файлового потока в файл (то есть, выполнялась функция Flush()), а то сейчас получается неприятная ситуация, что мое приложение виндой убивается, и все данные, что должны были записаться в файл, но остались в буфере файлового потока, так и пропадают, не записавшись в файл.

Как перехватить закрытие приложения?

P.S. Как перехвачивать закрытие приложения с формой, я знаю. Но просто в моем приложении нет формы...
 
L

LuMee

Возможно, найдется что-то полезное.
 
T

Tolias

Возможно, найдется что-то полезное.
Первый пример с использованием AppDomain.CurrentDomain.ProcessExit у меня не работает. Это событие не происходит при закрытии приложения.

А примеры ниже для консольных приложений..
 
L

LuMee

Если у вас приложение без форм, может, есть смысл как раз сделать его консольным?
 
T

Tolias

Если у вас приложение без форм, может, есть смысл как раз сделать его консольным?
А разве можно сделать консольное приложение скрытым, чтобы при запуске не было консольного окна, и единственное место, где можно было увидеть это приложение, это в списке процессов Диспетчера задач Windows?
 
M

-master-

У Application есть ApplicationExit иент, не подойдет?

А ваще подумайте переделать это как вин-сервис, на сколько я понял задачу.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!