2013-03-21 64 views
0

在開發WPF應用程序時,我試圖以非交互方式停止應用程序的執行。此應用程序用於用戶將作業提交到Windows羣集的環境中,並且有時在意外情況下提交UI代碼。這些實例最終會在服務器上運行,直到有人識別出他們的存在並終止進程。如何阻止WPF應用程序非交互式運行?

繼在多個問題(#1#2#3)答案的建議,我實現了使用Environment.UserInteractive停止非交互式的使用下面的代碼:

private void Application_Startup (object sender, StartupEventArgs e) 
{ 
    if (Environment.UserInteractive) 
    { 
     var window = new MainWindow(); 
     window.Show(); 
    } 
} 

快速測試與Windows 7任務計劃透露這個過程仍然活躍!由於無論用戶是否登錄,該任務都設置爲運行,因此我沒有在任何地方看到窗口,也不確定Environment.UserInteractive是否返回true

那麼如何檢測WPF應用程序是否以非交互方式運行?

回答

0

顯然,建議是正確的,Environment.UserInteractive返回false。但是,最終發生的事情是WPF調度程序繼續進行,無論有沒有窗口。

應用程序停止時ApplicationShutdown方法被稱爲只在運行:當你讀的言論爲Application.ShutdownMode這將很明顯。根據ShutdownMode屬性的值的指定,可以隱式或顯式關閉關閉。

爲了實際阻止WPF進程非交互式運行,您必須告訴它停止運行!

if (Environment.UserInteractive) 
{ 
    var window = new MainWindow(); 
    window.Show(); 
} 
else 
{ 
    // This step is important, otherwise the application will continue running 
    this.Shutdown(1); 
} 

一旦添加了調用Application.Shutdown,該過程將非交互方式運行時,在一個不錯的方式推倒!

任務計劃圓滿完成任務 「\ runTest方法」,例如 「{0d4e6506-B12B-4181-8a75-17754ddef81c}」,行動 「\\ networkshare \路徑\爲\ Executable.exe」,返回碼1。