PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : .Net 2.0 , C# : Wie kann ich ICLRPolicyManager::SetUnhandledExceptionPolicy aufrufen


Elemental
2006-09-26, 09:23:00
Hallo,
Ich habe eine Applikation, welche unter .NET1.1 entwickelt wurde und unter .NET2.0 nun sporadisch abstürzt.

Bei meiner Suche nach einer Lösung bin ich darauf gestossen, dass sich .NET2.0 bei unhandled exceptions anders verhält als .NET1.1.
( siehe dazu auch http://www.julmar.com/blog/mark/PermaLink,guid,f733e261-5d39-4ca1-be1a-c422f3cf1f1b.aspx )


Laut http://msdn.microsoft.com/msdnmag/issues/05/10/Reliability/default.aspx?side=true
gibt es zwei Möglichkeiten, die runtime auf das Verhalten von .NET1.1 umzuschalten.

Die erste Möglichkeit ist ein Eintrag im config file

<system>
<runtime><legacyUnhandledExceptionPolicy enabled="1"/></runtime>
</system>

was bei mir aber nicht funktioniert. da krieg ich immer gleich beim Start der Applikation eine Exception mit der Meldung "Failed to initialize the configuration system" und "unknown configuration section".


Die zweite Möglichkeit ist die Methode ICLRPolicyManager::SetUnhandledExceptionPolicy.
( http://windowssdk.msdn.microsoft.com/en-us/library/ms164400.aspx ).
Allerdings habe ich keine Ahnung, wie ich diese Methode aus meiner C# Applikation aufrufen soll. Ich habe versucht zu meinem Projekt eine Referenz auf die dll mscoree.dll hinzu zu fügen, was nicht funktioniert hat.

Jetzt fällt mir nur noch P/Invoke als Möglichkeit ein. Aber wie geb ich da diese Methode an?

Bin für jede Hilfe dankbar!
mfG

Gast
2006-09-26, 11:31:40
Also ich will ja nix sagen, aber ich würd eher danach schauen, dass du die Exceptions los wirst.

Elemental
2006-09-26, 11:43:19
Also ich will ja nix sagen, aber ich würd eher danach schauen, dass du die Exceptions los wirst.

Als ob ich das nicht versucht hätte...


System.NullReferenceException was unhandled
Message="Object reference not set to an instance of an object."
Source="System.Messaging"
StackTrace:
at System.Messaging.MessageQueue.MQCacheableInfo.Dispose(Boolean disposing)
at System.Messaging.MessageQueue.MQCacheableInfo.Finalize()



Aussage eines Microsoft entwicklers in den MSDN-Foren dazu:

We changed the way we internally manipulate the native handles in .NET 2.0; unfortunately, not all of the code was altered to accomodate this change - the issue you are encountering is an example of that: when you dispose the message queue, the handles are deleted by runtime, but then when system.messaging calls finalize, we assume that the handles still exist and try to dispose them off.


Und nu :confused:

Elemental
2006-09-26, 14:15:17
Hier die Lösung:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<runtime>
<legacyUnhandledExceptionPolicy enabled="1" />
</runtime>
</configuration>


:smile: