Process.Exited并不总是开火

时间:2010-01-29 14:21:14

标签: c# process

如果我运行以下代码:

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文档等)。也许我的方法不对。用户退出进程后还有其他方法可以删除文件吗?

谢谢

5 个答案:

答案 0 :(得分:14)

您应该为该过程启用事件。

process_name.EnableRaisingEvents = true;

答案 1 :(得分:7)

我会使用临时文件。有一些函数可以创建一个临时文件...

我想,由于缺乏流程本身,您的活动不会被解雇。您可以尝试使用shell来“启动”有问题的文档,但没有任何保证会有所有类型文件的处理程序。

答案 2 :(得分:5)

对于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中提供您已退出的活动

答案 3 :(得分:1)

您正在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();
    } 


}

答案 4 :(得分:0)

使用Microsoft Photo Viewer作为查看器,事件触发了我。您是否正在使用未实际关闭的查看器?