AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein .NET-Framework (managed code) Fehler 0x80040201 beim Event registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler 0x80040201 beim Event registrieren

Ein Thema von FAlter · begonnen am 6. Feb 2017
Antwort Antwort
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#1

Fehler 0x80040201 beim Event registrieren

  Alt 6. Feb 2017, 16:25
Hallo zusammen,

ich habe schon seit Ewigkeiten sporadische Probleme mit einem Outlook-Add-On, dass ich bisher auf .NET 2.0-Grundlage in C# entwickelt habe. Leider lässt sich das nicht gezielt nachstellen, bzw. mir ist bisher nicht bekannt wie ich es nachstellen könnte. Leider werde ich als der Entwickler immer mal wieder auf den Fehler angesprochen und komme hier einfach nicht weiter. Ich habe momentan ein try-catch Drumherum und gebe die Fehlermeldung in einer Message Box aus.

Es gibt eine System.Runtime.InteropServices.COMException "Ein Ereignis konnte keine Abonnenten abrufen" HRESULT 0x80040201

Ich habe nun vor kurzem einen KB 926997 gefunden, der wohl erst im Januar 2017 erstellt oder aktualisiert wurde und der nach genau dem Problem aussieht. Hier liest es sich aber so, als sei nur .NET 2.0 betroffen und es würde sich mit dem nächsten Windows-Update von alleine lösen, wenn du es schneller brauchst installiere einen Hotfix.

Nun ist mir in dem Zusammenhang aufgefallen, dass das Projekt immer noch auf .NET 2.0 läuft und da der Artikel explizit nur von einem Fehler in .NET 2.0 spricht, habe ich das Projekt auf .NET 4.5.1 umgestellt (ich habe im Moment noch VS 2013 installiert, da ist das das neueste unterstützte) - und auch dort bereits einmal (wieder zu unpassendem Zeitpunkt ohne Debugger) die Exception bekommen. Mein Problem ist also wohl unabhängig davon, ob ich die Serie .NET 2.0(3.0/3.5 oder 4.0/4.5/4.6 nutze, oder der Artikel ist falsch und es sind auch die neueren Versionen betroffen (für die es nicht einmal einen Hotfix gibt).

Zur Vollständigkeit ein Codingauszug:

Connect.cs (nur um zu zeigen, wo ich her komme - der Fehler kommt in der anderen Klasse, s.u.)
Code:
   public class Connect : Object, Extensibility.IDTExtensibility2, Microsoft.Office.Interop.Outlook.FormRegionStartup, Microsoft.Office.Core.IRibbonExtensibility, IDisposable
    {
...
        public void BeforeFormRegionShow(Microsoft.Office.Interop.Outlook.FormRegion FormRegion)
        {
...
                new ContactFormInfo(FormRegion);
...
        }
ContactFormInfo.cs
Code:
    class ContactFormInfo
    {
...
        private Microsoft.Vbe.Interop.Forms.UserForm Form;
        private Microsoft.Vbe.Interop.Forms.Controls Controls;
        private Microsoft.Office.Interop.Outlook.OlkCommandButton PruefBtn;
...
        public ContactFormInfo(Microsoft.Office.Interop.Outlook.FormRegion FormRegion)
        {
            // Formularobjekt holen
            Form = (Microsoft.Vbe.Interop.Forms.UserForm)FormRegion.Form;

            // Auflistung der Unterelemente (Eigenschaft, hinter der eine Funktion/COM-Aufruf steht, daher aus
            // Performancegründen auf Variable gespeichert --> zwei weitere Aufrufe gespart)
            #region Anmerkung zu Microsoft.Vbe.Introp.Forms.Userform.Controls und Exception
            // Wenn hier eine Exception auftritt:
            // http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/4f70d238-88b0-485a-806d-d39e6d22fc92/
            // Falscher Verweis auf MS Forms 2.0, anderen verwenden.
            #endregion
            Controls = Form.Controls;

            //Objekte zu den Komponenten holen
            PruefBtn = (Microsoft.Office.Interop.Outlook.OlkCommandButton)Controls.Item("PruefButton");
...

            //Ereignibehandler hinzufügen
            try
            {
                PruefBtn.Click += PruefBtnClick;
            }
            catch (System.Runtime.InteropServices.COMException e)
            {
                Connect.ShowException("Fehler beim Registrieren des Eventhandlers für den Prüfbutton", e);
            }
        }
...
        private void PruefBtnClick()
        {
...
Die Exception kommt bei der Anweisung PruefBtn.Click += PruefBtnClick;. Seht ihr einen Fehler bei mir, meint ihr es ist das von MS beschriebene Problem im .NET Framework selbst oder ganz etwas anderes?

Ich dachte halt, endlich eine Spur zu haben und nun hat es doch nicht geholfen. Zurück zu .NET 2.0 und Hotfix könnte ich noch probieren... aber viel lieber würde ich bei 4.5.1 bleiben und vielleicht demnächst mit einem neuen Visual Studio auf 4.6 gehen. Dann entfällt auch das Aktivieren von .NET 2.0/2.0/3.5 unter Programme und Features, das bisher noch notwendig ist. (4.0 bis 4.6 ist in Windows 10 ja immer aktiv, 2.0 bis 3.5 eben nicht)

Das Problem tritt nur manchmal auf, normalerweise nicht wenn Outlook frisch gestartet wurde sondern nur nach längerer Nutzung, wenn bis dahin der Formularbereich (Zusatzbereich zu einem Outlook-internem Formular) noch nicht genutzt wurde - und selbst dann gibt es meistens keine Probleme. Wenn der Formularbereich schon einmal verwendet wurde, klappen in der Regel auch alle anderen späteren Aufrufe mit neuen Formularbereichen.

Das Ereignis soll beim Anklicken eines Buttons auf dem Formularbereich Vorschlagswerte ermitteln und diese in zwei Eingabefelder auf dem Formularbereich schreiben. Wenn das registrieren des Eventhandlers fehlschlägt, gebe ich eine Meldung aus und dann passiert eben bei Buttonklick nichts und der Anwender muss die Felder selbst ausfüllen. Das ist die einzige Stelle bei der ich Events in dieser Form zu externen Controls registriere, die von Outlook außerhalb meines eigenen .NET Codes erzeugt wurden. Daher funktionieren alle anderen Erweiterungen, die das Addon zu Outlook hinzufügt, weiterhin einwandfrei.

Viele Grüße

Felix
Felix Alter
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz