如果我运行以下代码:
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文档等)。也许我的方法不对。用户退出进程后还有其他方法可以删除文件吗?
谢谢
答案 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作为查看器,事件触发了我。您是否正在使用未实际关闭的查看器?