Процесс. Выход не всегда стрельба - PullRequest
11 голосов
/ 29 января 2010

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

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 и т. Д.).Может быть, мой подход не правильный.Есть ли другой способ удалить файл после того, как пользователь вышел из процесса?

Спасибо

Ответы [ 5 ]

14 голосов
/ 26 сентября 2012

Вы должны включить поднятие событий для процесса.

7 голосов
/ 26 октября 2010

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

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

5 голосов
/ 18 января 2012

Для проигрывателя Windows Media попробуйте следующий код

 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

1 голос
/ 29 января 2010

Вы используете средство просмотра изображений по умолчанию в 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();
    } 


}
0 голосов
/ 29 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...