16. April 2012 15:05
Hallo zusammen,
gibt es irgendwie eine Möglichkeit Fehler eines Add-Ins so abzufangen, ohne das der RTC abstürtzt?
Beispiel:
Programm besteht aus 2 DLL, also AddIn (1.DLL) hat einen Verweis auf die 2. DLL. Fehlt die 2. DLL oder ist nicht im GAC registriert, dann stürzt der RTC ab.
Oder ist das ein bekanntes Problem und kann durch eine neue Build-Version behoben werden? Oder gibt es eine Möglichkeit, die ich noch nicht kenne?
Ich habe hier R2 (32012).
Volker
16. April 2012 16:00
Das würde mich auch interessieren.
Meine Erfahrung (wenn auch nicht so Umfangreiche) hat mir gezeigt, dass sobald das Add-In in einen unbehandelten Fehler läuft, der RTC zusammen mit dem Add-In abschmiert.
Ist das Add-in von einem selbst programmiert kann man das alles mit Exception Handling gut abfangen. Ansonsten??
16. April 2012 16:16
Hi Martin,
bis jetzt kann ich nur Fehler, die mehr oder weniger während das Add in irgendwas ausführt abfangen. Aber wenn wie in meinem Beispiel oben eine Programm-Datei des AddIns bereits beim Laden fehlt wandert der RTC schon beim Laden des Add In ins Nirwana. Und das obwohl ich das Add In selber erstelle.
Volker
18. April 2012 14:54
Hi Volker,
ich glaube, ohne ein Heilsversprechen abgeben zu wollen, dass es am Build liegt.
Wir haben hier den Build 32275. Wenn ich nun alle erforderlichen DLL's oder einen Teil wegnehme, bekomme ich auf der Page anstelle des Controls, eine Fehlermeldung angezeigt (siehe Anhang). Der Client schmiert mir jedoch nicht ab.
Greetz
Simon
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
18. April 2012 15:24
Hallo,
du müsstest doch in deinem Add-In (Code), da wo auf die 2. DLL zugegriffen wird, eine Try-Catch Block (siehe .Net Try-Catch Block oder Exception).
Beispiel:
http://www.tutorials.de/net-archiv/2158 ... -copy.htmlAnsonsten müsstest du im Classic bevor du die Page mit dem Add-In Aufrufst, kontrollieren ob es die DLLs im Verzeichnis gibt und je nachdem die Page öffnen oder nicht.
Gruß
Aydin
18. April 2012 15:54
Hi Aydin,
ich habe das ganze etwas verkürzt mit nur 2 Dlls dargestellt, tatsächlich sind es aber noch mehr und leider auch welche, die ich nicht beeinflussen kann, u. a. auch COM-Dlls. Was mich halt wundert, dass der RTC durch Addin-Fehler abstürzen kann statt den Fehler selbst abzufangen. In meinen Augen müßte Try/Catch doch eigentlich innerhalb NAV in der AddIn-Schnittstelle schon sitzen.
Volker
18. April 2012 16:20
Ein AddIn ist eine Control-Erweiterung von einer Page des RTC. Wenn der Teil wegschmiert, muss der RTC Client mehr oder weniger zwangsläufig abschmieren. Unhandled Exception halt.
18. April 2012 16:33
Also ich versuche genau das in meinen Programmen zu verhindern. Das geht z. b. so:
Im Startobjekt der Anwendung:
- Code:
AddHandler System.Windows.Forms.Application.ThreadException, AddressOf OnThreadException
und hier wird der Fehler verarbeitet:
- Code:
Public Sub OnThreadException(ByVal sender As Object, ByVal t As System.Threading.ThreadExceptionEventArgs)
Dim errtxt As String = t.Exception.ToString
Dim errmsg As String = t.Exception.Message
errtxt = String.Concat(errtxt, vbCrLf, vbCrLf, "Programm dennoch weiter ausführen?")
Try
bbasic.Logdatei(errtxt, errmsg)
Catch
End Try
If MsgBox(errtxt, MsgBoxStyle.Exclamation Or MsgBoxStyle.OkCancel, "Fehler im Programm aufgetreten") = MsgBoxResult.Cancel Then
Try
Me.Close()
bbasic.Logdatei("Programm durch Benutzer abgebrochen", "")
Catch
End Try
Application.Exit()
Else
bbasic.Logdatei("Programm wurde weiter ausgeführt", "")
End If
End Sub
So halte ich das Programm auch be Fehlern in Drittanbeiter-Dlls am laufen. Ob das immer sinnvoll und sicher ist muss jeder im Einzelfall prüfen.
Volker
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.