C CLR20R3 程式終止的幾種解決方案

2022-02-06 08:04:16 字數 4667 閱讀 4007

這是因為.net framework 1.0 和 1.1 這兩個版本對許多未處理異常(例如,執行緒池執行緒中的未處理異常)提供支撐,而 framework 2.0 版中,公共語言執行庫允許執行緒中的多數未處理異常自然繼續。在多數情況下,這意味著未處理異常會導致應用程式終止。

一、c/s 解決方案(以下任何一種方法)

1. 在應用程式配置檔案中,新增如下內容:

123

"true

" />4

5

2. 在應用程式配置檔案中,新增如下內容:

123

"v1.1.4322

"/>45

2public

static

void main(string

args)

3日誌事件

1

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

二、b/s 解決方案(以下任何一種方法)1. 在ie目錄(c:/program files/internet explorer)下建立iexplore.exe.config檔案,內容如下:

1

<?xml version="

1.0"?> 23

4"true

" />5

6

2. 不建議使用此方法,這將導致使用 framework 1.1 以後版本的程式在ie中報錯。

建立同上的配置檔案,但內容如下:

1

<?xml version="

1.0"?> 23

4"v1.1.4322

"/>56

3. 這個比較繁瑣,分為三步:

⑴. 將下面的**儲存成檔案,檔名為unhandledexceptionmodule.cs,路徑是c:/program files/microsoft visual studio 14/

1

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 }

⑵. 開啟visual studio 2005的命令提示行視窗 

輸入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...