如果是,而且又不想忍受漫長(zhǎng)的注銷過程,試試看這個(gè) Gina 吧——TNTGina——用于 Terminate MSVC 的 NTGina。
- 緣起:
VC 在調(diào)試多線程程序(GraphEdit 調(diào)試 DShow Filter 時(shí),基本上都是)的時(shí)候經(jīng)常死機(jī),特別是在 Windows XP 中。
此時(shí)按 Ctrl+Alt+Del 有效,但喚出任務(wù)管理器后,卻無(wú)法操作。只好作注銷或重啟處理:(
- 注冊(cè):
保存到系統(tǒng)登錄時(shí)能訪問到的路徑上,用 RegSvr32.exe TNTGina.dll 注冊(cè)它。重新啟動(dòng)系統(tǒng)后才能生效。
(這不是一個(gè)COM組件,只不過為了注冊(cè)和注銷方便,導(dǎo)出了兩個(gè)函數(shù),里面其實(shí)只是寫了注冊(cè)表的一個(gè)鍵值,改寫了GinaDLL的路徑)。
- 注銷:
RegSvr32.exe /u TNTGina.dll
- 用法:
注冊(cè)這個(gè) Gina 后,問題就接解決了——雖然不能從根本上解決問題——不能防止VC死掉——但卻可以:
按亮 ScrollLock,然后按 Ctrl+Alt+Del,MSVC 馬上被終止掉,系統(tǒng)恢復(fù)用戶界面響應(yīng)。重新打開VC調(diào)試吧……
- 原理:
這是一個(gè) Gina DLL,Gina 是負(fù)責(zé)處理系統(tǒng)登錄等用戶界面操作的DLL,且 MS 允許用戶重寫它。
于是我寫了這個(gè) DLL,處理了 SrcollLock 高亮狀態(tài)下的 Ctrl+Alt+Del 安全事件,并強(qiáng)制終止 MSVC 進(jìn)程。
對(duì)于其它情況處理,則轉(zhuǎn)交給原來(lái)的 MSGina.dll。
- 后話:
這個(gè) DLL 是使用 AheadLib 自動(dòng)生成的,然后添加了一點(diǎn)操作代碼。
- 下載:
TNTGina (包括代碼)
但最關(guān)鍵的是無(wú)法調(diào)試要用到通用串口的程序,或者你知道如何設(shè)置vmware使得能夠使用通用串口?我反正沒找到方法呵呵。
呵呵。也早就發(fā)現(xiàn)這其實(shí)是個(gè)假死,我感覺應(yīng)該是GUI系統(tǒng)卡住了。卻一直沒有想起編這樣一個(gè)程序來(lái)輔助結(jié)束devenv.exe。謝謝你了。
不知道微軟自己怎么想這個(gè)問題?我就奇怪怎么這么長(zhǎng)時(shí)間,一點(diǎn)官方說(shuō)法都沒有??不知道2005里是不是能夠修正這個(gè)問題了。
我記得當(dāng)初用VC6時(shí),好像是裝了SP4后就好了?不過那是N年前的事了,也可能是我記錯(cuò)了。
根據(jù)我的經(jīng)驗(yàn),是在斷點(diǎn)處不能切換到主界面。
可以點(diǎn)中止調(diào)試(Shift F5),大約1分鐘會(huì)恢復(fù)主界面。
不點(diǎn)中止調(diào)試好象一直處于假死狀態(tài)。
不知為什么調(diào)方式器會(huì)造成整個(gè)系統(tǒng)的假死?
另外,這不是COM,只是我道出了兩個(gè)函數(shù)用來(lái)注冊(cè)和注銷Gina