這是因為.net framework 1.0 和 1.1 這兩個版本對許多未處理異常(例如,執行緒池執行緒中的未處理異常)提供支撐,而 framework 2.0 版中,公共語言執行庫允許執行緒中的多數未處理異常自然繼續。在多數情況下,這意味著未處理異常會導致應用程式終止。
一、c/s 解決方案(以下任何一種方法)
1. 在應用程式配置檔案中,新增如下內容:
1232. 在應用程式配置檔案中,新增如下內容:"true
" />4
5
1232public"v1.1.4322
"/>45
static
void main(string
args)
3日誌事件
1二、b/s 解決方案(以下任何一種方法)1. 在ie目錄(c:/program files/internet explorer)下建立iexplore.exe.config檔案,內容如下:private
static
void form1_uithreadexception(object
sender, threadexceptioneventargs t)28
catch915
finally
1619}20
21if (result ==dialogresult.abort)
2223}24
2526
//由於 unhandledexception 無法阻止應用程式終止,因而此示例只是在終止前將錯誤記錄在應用程式事件日誌中。
27private
static
void currentdomain_unhandledexception(object
sender, unhandledexceptioneventargs e)
2839
40 eventlog mylog = new
eventlog();
41 mylog.source = "
threadexception";
42 mylog.writeentry(errormsg + ex.message + "
/n/nstack trace:/n
" +ex.stacktrace);43}
44catch
(exception exc)
4552
finally
5356}57
}585960
private
static dialogresult showthreadexceptiondialog(string
title, exception e)
61
12. 不建議使用此方法,這將導致使用 framework 1.1 以後版本的程式在ie中報錯。<?xml version="
1.0"?> 23
4"true
" />5
6
建立同上的配置檔案,但內容如下:
13. 這個比較繁瑣,分為三步:<?xml version="
1.0"?> 23
4"v1.1.4322
"/>56
⑴. 將下面的**儲存成檔案,檔名為unhandledexceptionmodule.cs,路徑是c:/program files/microsoft visual studio 14/
1⑵. 開啟visual studio 2005的命令提示行視窗using
system;
2using
system.diagnostics;
3using
system.globalization;
4using
system.io;
5using
system.runtime.interopservices;
6using
system.text;
7using
system.threading;
8using
system.web;910
namespace
webmonitor '. this module requires .net framework 2.0.",
30webenginepath));31}
3233 fileversioninfo ver =fileversioninfo.getversioninfo(webenginepath);
34 _sourcename = string.format(cultureinfo.invariantculture, "
asp.net ...0",
35ver.filemajorpart, ver.fileminorpart, ver.filebuildpart);
3637
if (!eventlog.sourceexists(_sourcename)) '. this module requires .net framework 2.0.",
40_sourcename));41}
42unhandledexceptioneventhandler(onunhandledexception);
4445 _initialized = true;46
}47}48
}49}50
51public
void
dispose()
5354
void onunhandledexception(object
o, unhandledexceptioneventargs e)
6566 exception currentexception = null;67
for (currentexception = (exception)e.exceptionobject; currentexception != null; currentexception =currentexception.innerexception) /r/n/r/nmessage=/r/n/r/nstack=/r/n/r/n/r/n",
69currentexception.gettype().fullname,
70currentexception.message,
71currentexception.stacktrace);
72}
7374 eventlog log = new
eventlog();
75 log.source =_sourcename;
76log.writeentry(message.tostring(), eventlogentrytype.error);77}
78}79 }
輸入type sn.exe -k key.snk後回車
輸入type csc /t:library /r:system.web.dll,system.dll /keyfile:key.snk unhandledexceptionmodule.cs後回車
輸入gacutil.exe /if unhandledexceptionmodule.dll後回車
輸入ngen install unhandledexceptionmodule.dll後回車
輸入gacutil /l unhandledexceptionmodule後回車並將顯示的」強名稱」資訊複製下來
⑶. 開啟asp.net應用程式的web.config檔案,將下面的xml加到裡面。注意:不包括」」,①可能是新增到之間。
三、微軟並不建議的解決方案
開啟位於 %windir%/microsoft.net/framework/v2.0.50727 目錄下的 aspnet.config 檔案,將屬性 legacyunhandledexceptionpolicy 的 enabled 設定為 true
四、跳出三界外——activex
activex 的特點決定了不可能去更改每個客戶端的設定,採用 b/s 解決方案裡的第 3 種方法也不行,至於行不通的原因,我想可能是因為 activex 的子控制項產生的異常直接
被 clr 截獲了,並沒有傳到最外層的 activex 控制項,這只是個人猜測,如果有清楚的朋友,還望指正。
最終,我也沒找到在 activex 情況的解決方法,但這卻是我最需要的,無奈之下,重新檢查**,發現了其中的問題:在子執行緒中建立了控制項,又將它新增到了主線程的 ui 上。
以前遇到這種情況,系統就會報錯了,這次居然可以蒙混過關,最搞不懂的是在 framework 2.0 的 c/s 結構下也沒有報錯,偏偏在 ie(activex) 裡掛了。唉,都是宿主惹的禍。
EC20 R2 0移植海思平台
1 核心新增vid和pid 在核心中 drivers usb serial option.c,static const struct usb device id option ids後面加入ec20 ec25的硬體id define quectel vid and pid 注意ec20 r2.0 v...
R3多執行緒
ncreatethread 是windows的api函式 sdk函式的標準形式,直截了當的建立方式,任何場合都可以使用 提供作業系統級別的建立執行緒的操作,且僅限於工作者執行緒。不呼叫mfc和rtl的函式時,可以用createthread,其它情況不要使用。因為 qcruntime中需要對多執行緒進...
R語言3 判斷 迴圈
ifif.else switch 語句 x c 1,2,3,4,5 if 2 in x else if 2 in x else if 6 in x else a switch 3,4,one two 9,12,3 3表示獲取後面元素中的第三個 a三個判斷結構的結果如下 1 2 in x 1 2 in...