2012-12-06 55 views
0

我正在使用VS 2010,winForm。如何在程序进程结束时运行代码

有人建议如何运行方法时程序过程结束?

我想:How to run code before program exit? 解决方案,但它仅是我的“关闭按钮”关闭形式,如果我在任务管理器中它不叫结束的过程,是有可能处理这样的事件?

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new MainForm()); 
    AppDomain.CurrentDomain.ProcessExit += new EventHandler (OnProcessExit); 
} 

public static void OnProcessExit(object sender, EventArgs e) 
{ 
    if (Utils.RemindTime != DateTime.MinValue) 
     Utils.SetStartup(true); 
} 
+0

如果你杀死了这个进程,你就会终止进程。没有任何东西可以执行任何任务。 –

+0

请参阅[此问题](http://stackoverflow.com/questions/4479707/guarantee-code-execution-even-on-process-kill)获取详细答案。简而言之:无法完成 –

+0

您可以直接在“Application.Run”行下放置代码,而不是设置事件处理程序吗?如果这不起作用,请尝试在“Application.Run”之前放置事件处理程序代码。 – Matthew

回答

1

您使用另一个程序来启动此程序。 比方说,你的应用程序是“记事本”:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var startInfo = new ProcessStartInfo("notepad.exe"); 
     var process = Process.Start(startInfo); 
     process.WaitForExit(); 
     //Do whatever you need to do here 
     Console.Write("Notepad Closed"); 
     Console.ReadLine(); 
    } 
} 

你可以与Linux中的Windows 批处理文件或shell脚本类似的东西。

当然,它不会给你访问你启动该程序, 的内部,但它可以确保“一些代码”在执行过程是通过任务管理器杀了以后,唯一的办法

+0

我明白了,日Thnx的帮助,也许我应该想出一些不同的东西:))) – Edgar

+1

当然,如果有人不杀“记事本”之前,这个过程 –

+0

我不知道你正在尝试做的完全是,但也许有一点你想弄清楚你的应用程序是否正确或不正确地关闭(通过杀死它)。你所做的是你在应用程序启动时创建一个文件,当它正确关机时,你删除该文件。在上面的示例中,检查该文件是否存在,如果存在,则应用程序被终止,如果不是该应用程序已正常关闭,则返回 – TimothyP

相关问题