Процесс. Выдерживает не всегда стрельбу

Если я запустил следующий код:

Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.FileName = "notepad.exe";
myProcess.EnableRaisingEvents = true;
myProcess.Exited += new System.EventHandler(Process_OnExit);
myProcess.Start();

public static void Process_OnExit(object sender, EventArgs e)
{
    // Delete the file on exit
}

Событие возникает при выходе из блокнота. Если я попробую тот же код, но вместо этого создаю изображение:

Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.FileName = @"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg";
myProcess.EnableRaisingEvents = true;
myProcess.Exited += new System.EventHandler(Process_OnExit);
myProcess.Start();

public static void Process_OnExit(object sender, EventArgs e)
{
    // Delete the file on exit
}

Событие никогда не запускается. Это потому, что процесс, который загружает изображение, никогда не закрывается?

ОБНОВЛЕНИЕ: Процесс запуска - это не всегда изображение. Это может быть что угодно (pdf, word document и т.д.). Может быть, мой подход неправильный. Есть ли другой способ удалить файл после выхода пользователя из процесса?

Спасибо

Ответ 1

Я бы использовал временный файл. Существуют функции для создания временного файла...

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

Ответ 2

вам следует активировать события для процесса.

process_name.EnableRaisingEvents = true;

Ответ 3

Для Windows Media Player попробуйте следующий код

 myProcess.StartInfo.FileName = "wmplayer";
 myProcess.StartInfo.Arguments = "yourfilename";

Для просмотра изображений в Windows попробуйте

 myProcess.StartInfo.FileName = @"rundll32.exe";
 myProcess.StartInfo.Arguments = @"C:\Windows\System32\shimgvw.dll,ImageView_Fullscreen " + yourfilepath;

Теперь оба передадут ваше завершенное событие в Windows 7

Ответ 4

Вы используете средство просмотра изображений по умолчанию в Windows, поскольку файл изображения не является исполняемым. Я изменил код для использования XP по умолчанию, и он работал нормально.

class Program
{
    static void Main(string[] args)
    {
        Process myProcess = new System.Diagnostics.Process(); 
        myProcess.StartInfo.FileName = @"rundll32.exe"; 
        myProcess.EnableRaisingEvents = true;
        myProcess.StartInfo.Arguments = @"C:\winnt\System32\shimgvw.dll,ImageView_Fullscreen c:\leaf.jpg";
        myProcess.Exited += new System.EventHandler(Process_OnExit); 
        myProcess.Start();
        Console.Read();



    }
    public static void Process_OnExit(object sender, EventArgs e)
    {
        Console.WriteLine("called");
        Console.Read();
    } 


}

Ответ 5

Событие запускается для меня с помощью Microsoft Photo Viewer в качестве средства просмотра. Возможно, вы используете средство просмотра, которое фактически не закрывается?