2010-01-29 124 views
10

如果我运行下面的代码:Process.Exited并不总是射击

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 
} 

事件永远不会被解雇。是否因为加载图像的过程永远不会关闭?

UPDATE:开始该过程并不总是一个图像。它可以是任何东西(pdf,word文档等)。也许我的做法是不正确的。在用户退出过程之后是否有其他方式来删除文件?

谢谢

回答

7

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

你的事件不是由于缺乏对过程本身的射击,我猜。您可以尝试使用shell来“启动”有问题的文档,但不保证所有类型的文件都有处理程序。

+0

是的,我认为这是一个过程中的问题。Thx的帮助 – 2010-10-27 00:04:07

0

事件以Microsoft Viewer作为查看器激发我。您是否可能使用实际上并未关闭的查看器?

+2

这是奇怪的。我已经测试了Windows 7和Vista上的代码,并且事件从未被解雇。该过程启动默认的Windows照片查看器 – 2010-01-29 15:04:37

+0

您的程序在事件触发之前退出。 – rerun 2010-01-29 15:37:01

+0

否。如果将文件路径的代码更改为word文档,则会触发该事件。这是Windows照片查看器真正的问题。 您试过什么操作系统? – 2010-01-29 15:46:27

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


} 
+1

不幸的是,我需要一个通用的方法。它可能并不总是一个图像。它可以是PDF,Word文档等。我已更新我的问题。 – 2010-01-29 15:03:35

4

的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

15

您应该启用提高该过程的事件。

process_name.EnableRaisingEvents = true; 
+3

他在他的代码虽然 – 2012-09-27 06:48:24

+3

虽然我忘记了我的代码,这个答案帮了我;) – ensisNoctis 2016-03-17 16:01:41