2009-08-17 171 views
2

如何使用c#安全地關閉所有正在運行的應用程序而不使用windows註銷&關閉API函數。關閉所有應用程序後,我想顯示我的應用程序如何用c#安全關閉所有正在運行的應用程序#

+1

爲什麼要這樣做? – 2009-08-17 04:54:31

+0

我想顯示我自己的登錄應用程序,該應用程序根據我的在線服務器數據庫驗證用戶。 – 2009-08-17 04:57:14

+0

他的下一個問題:如何在網站上的用戶計算機上運行未經授權的程序? – 2009-08-17 04:57:33

回答

1

您可以迭代通過正在運行的進程,然後您需要決定如何「溫和」你想關閉其他進程。請注意,發送消息(如WM_CLOSE)不會強制它們關閉。

5

如果這是爲了替代標準的Windows登錄機制,那麼你做得不對。在2000/XP上,考慮寫一個customGINAreplacement。在Vista/7上,你需要寫一個新的憑據提供者,因爲他們擺脫了舊的GINA/Winlogon堆棧。

如果您正在嘗試進行某種類型的自定義服務,那麼您是否僅僅考慮了switching desktops?這基本上是Windows爲Ctrl + Alt + Delete和UAC「安全桌面」所做的。遠遠少於殺死整個系統和重新填充的工作。

說真的,仔細反思你要做什麼。以下幾乎肯定是錯誤的,並且可能並不總是適用於某些程序:

// I mean it! This will cause badness! 
using System.Diagnostics; 

Process me = Process.GetCurrentProcess(); 
foreach (Process p in Process.GetProcesses()) 
{ 
    if (P.Id != me.Id) 
     P.CloseMainWindow(); // Sends WM_CLOSE; less gentle methods available too 
} 
+0

,關閉窗口出現。我想關閉系統而不關機 – 2009-08-17 11:58:41

+1

因此,在if語句中添加更多邏輯。確保你沒有試圖取消WinLogon.exe和類似的進程。考慮P /調用EnumWindows()並手動發送WM_CLOSE調用。 – ChrisV 2009-08-17 12:54:34

+0

這是一個黃金答案。我試圖優雅地關閉應用程序,並且不知道CloseMainWindow存在。謝謝! – Qosmo 2011-03-23 17:46:57

相關問題