RTC Add In - Error-Handling

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

Re: RTC Add In - Error-Handling

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??

Re: RTC Add In - Error-Handling

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

Re: RTC Add In - Error-Handling

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.

Re: RTC Add In - Error-Handling

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.html

Ansonsten 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

Re: RTC Add In - Error-Handling

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

Re: RTC Add In - Error-Handling

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.

Re: RTC Add In - Error-Handling

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