C# 进程。退出并不总是启动

C# 进程。退出并不总是启动,c#,process,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 P

如果我运行以下代码:

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文档等)。也许我的方法不对。用户退出进程后,是否有其他方法删除该文件


谢谢

我将使用Microsoft Photo Viewer作为查看器触发事件。您是否使用的查看器实际上没有关闭?

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


}

我会使用临时文件。有创建临时文件的函数


我想,您的事件没有触发是因为缺少进程本身。您可以尝试使用shell来“启动”有问题的文档,但不能保证所有类型的文件都有一个处理程序

对于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中提供退出事件。您应该为进程启用引发事件

process_name.EnableRaisingEvents = true;

不幸的是,我需要一个通用方法。它可能并不总是一个图像。它可以是PDF、word文档等。我已经更新了我的问题。这很奇怪。我已经在Windows7和Vista上测试了代码,但事件从未触发。当程序在事件触发前退出时,进程将启动默认的Windows照片查看器。否。如果将文件路径的“更改我的代码”更改为word文档,则会触发该事件。Windows照片查看器确实存在问题。你在什么操作系统上尝试过?我也在Windows Xp上测试过它,它正在工作。Vista和7的Windows照片查看器没有触发退出事件。真的很奇怪…我还可以用Winows 7重现这个问题-默认的照片查看器不会引发退出事件。是的,我认为这是进程中的问题。Thx的帮助,而我忘记了它在我的代码和这个答案帮助了我;)