c# 獲取應用程式exe檔案路徑及退出應用程式的幾種方法

滄海一滴發表於2013-09-11

this.GetType().Assembly.Location;
Application.ExecutablePath;

Application.StartupPath:和上面的相比缺少可執行檔案

================================================
有下面幾種方法退出應用程式:
Application.Exit();
Environment.Exit(System.Environment.ExitCode);
System.Threading.Thread.CurrentThread.Abort();
Process.GetCurrentProcess().Kill();
Application.ExitThread();

簡單解析:
Application.Exit():
Exit停止在所有執行緒上執行的所有訊息迴圈,並關閉應用程式的所有視窗。該方法並不強制退出該應用程式。Exit方法通常從一個訊息迴圈內呼叫,該方法強制Run返回。若要只退出當前執行緒的某個訊息迴圈,請呼叫ExitThread。

Exit引發下列事件並執行關聯的條件操作:
* 為OpenForms屬性表示的各個窗體引發FormClosing事件。可以通過將這些窗體的FormClosingEventArgs引數的Cancel屬性設定為true,取消此事件。
* 如果多個處理程式的其中之一取消該事件,則Exit將返回而無進一步操作。否則,將為每個開啟的窗體引發FormClosed事件,然後關閉所有正在執行的訊息迴圈和窗體。

也就是說Exit會引發被應用程式開啟的所有窗體的FormClosing和FormClosed事件。而且,如果某個視窗的FormClosingEventArgs引數的Cancel屬性被設定為true,那麼Exit將不會關閉所有視窗和停止所有的訊息迴圈。

從上面可以知道Application.Exit()並不強制退出應用程式,要想強制退出整個應用程式要用Environment.Exit():終止當前程式併為基礎作業系統提供指定的退出程式碼。

Dispose()方法,雖然能釋放當前窗體的資源,卻不能強制結束迴圈,
要想強制突出當前程式要用:System.Environment.Exit(int exitcode)方法
該方法:終止當前程式併為基礎作業系統提供指定的退出程式碼。
eg:
System.Environment.Exit(System.Environment.ExitCode);   

區別示例:

        private static void ReStart() 
        { 
            Application.Exit(); 
            System.Diagnostics.Process.Start(Application.ExecutablePath); 
        } 
用Environment.Exit就無法完成這個重啟功能


還有一種方法:  System.Threading.Thread.CurrentThread.Abort();
                          或者          Process.GetCurrentProcess().Kill() 
                           或者        Application.ExitThread();
不過以上方法,都是強制直接退出了整個程式,不只是關閉子窗體。可能還會引發某些問題,
建議在子窗體的Closing事件中,寫迴圈退出條件,這樣就可以避免某些未知的錯誤,而且可以只關閉子窗體,並釋放子窗體佔用的資源

在 Windows(Win32 或 .NET)中關閉應用程式的正確方式是關閉它的主應用程式視窗(例如 Form.Close)。主訊息泵結束後依然存在的任何視窗都需要手動關閉。在應用程式退出之前通過呼叫 Form.Close 或 Form.Dispose 來關閉視窗是清除視窗的良好做法,但這需要您有意識地去做。我們需要記住,.NET Framework 的 OnClosing() 是 Win32 的託管版本的 WM_CLOSE,而非 WM_DESTROY。

另外,如果您使用 form.Close(),通過處理 OnClosing 或 OnClosed 事件,就可以讓您的應用程式清理內容、關閉檔案等。如果您通過 Application.Exit 強行退出應用程式,就無法呼叫這些事件。

相關文章