SystemEvents.SessionEnding не запускается до тех пор, пока процесс (открытый ранее) не будет закрыт
Я пытаюсь сделать некоторые вещи в программе точно, когда пользователь закрывает сессию.
Вот код:
using System;
using System.Diagnostics;
using Microsoft.Win32;
using System.Windows.Forms;
using System.Threading;
public class MyProgram
{
static Process myProcess = null;
public MyProgram()
{
}
// Entry point
static void Main(string[] args)
{
SystemEvents.SessionEnding += SessionEndingEvent; // Does not trigger inmediately, only fires after "myProcess" gets closed/killed
myProcess = CreateProcess("notepad.exe", null);
myProcess.Exited += pr_Exited; // Invoked at "myProcess" close (works ok)
try
{
myProcess.Start();
}
catch (Exception e2) { MessageBox.Show(e2.ToString()); }
System.Windows.Forms.Application.Run(); // Aplication loop
}
static void SessionEndingEvent(object sender, EventArgs e)
{
MessageBox.Show("Session ending fired!");
}
static void pr_Exited(object sender, EventArgs e)
{
MessageBox.Show("Process Closed");
}
static Process CreateProcess(String path, String WorkingDirPath)
{
Process proceso = new Process();
proceso.StartInfo.FileName = path;
proceso.StartInfo.WorkingDirectory = WorkingDirPath;
proceso.EnableRaisingEvents = true;
return proceso;
}
}
Я открываю свое приложение, оно открывает блокнот. Когда я закрываю сессию:
Если я не изменил что-либо в блокноте (поэтому он не требует подтверждения при выходе), SO закрывает блокнот и запускается событие SessionEnding (так что в этом случае все нормально) и Process.Exited позже.
Если я что-то изменил в блокноте, блокнот спросит меня, хочу ли я сохранить, и мое событие не будет запущено, пока процесс блокнота не будет закрыт.
Другими словами, моя программа получает уведомление только тогда, когда запущенный мной процесс не запущен. Я хочу, чтобы мое событие вызывалось в любой ситуации, независимо от того, открыт процесс или нет.
Заранее спасибо.