2017-09-29 1 views
0

Ich versuche, ein Outlook-Anwendungsobjekt in meinem Add-In für Excel zu erhalten.C# Ausführen von Outlook-Instanz in VSTO-Add-in

Wenn eine Outlook-Instanz ausgeführt wird, sollte es erhalten, dass, wenn es keine gibt, sollte es eine erstellen, die das Outlook-Objektmodell verwendet.

Dies ist der Code, den ich jetzt haben:

public static Outlook.Application GetApplicationObject() 
{ 
    Outlook.Application application = null; 

    if (Process.GetProcessesByName("OUTLOOK").Count() > 0) 
    { 
     application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application; 
    } 
    else 
    { 
     application = new Outlook.Application(); 
    } 
    return application; 
} 

Mein Problem: es findet Prozesse Outlook, aber sie nicht bekommen können, die folgende Fehlermeldung zu werfen:

nicht verfügbar Betrieb (Ausnahme von HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))

Ich habe versucht, es Schritt für Schritt zu debuggen und den Task-Manager überwacht. Ich konnte sehen, dass ich eine Outlook-Instanz habe, aber es ist nur ein Symbol auf der rechten Seite der Taskleiste. Bedeutet das, dass die Instanz noch nicht vollständig geladen ist und auf sie nicht zugegriffen werden kann, um das Application-Objekt daraus zu holen?

Ich habe meinen Code geändert und die if-else in 2 try-catchs aufgeteilt, mit eigenen Returns, aber ich denke immer noch, dass der obige Code benutzbar sein sollte.

Antwort

1

Outlook ist ein Singleton, also new Outlook.Application() wird immer funktionieren - wenn es bereits ausgeführt wird, erhalten Sie das laufende Objekt.

Stellen Sie sicher, dass beide Anwendungen (Excel und Outlook) im selben Sicherheitskontext ausgeführt werden. Wird eine App mit erhöhten Rechten ausgeführt (als Administrator ausführen)?

+0

Das ist interessant! Ich habe eine Menge Code-Beispiele online gesehen, die diese "GetApplicationObject" -Funktion enthalten, die anscheinend entweder eine laufende Instanz erhalten oder eine neue erstellen soll. Dies wird jedoch behoben, während neue Outlook.Application() nicht ständig neue Instanzen erstellt! Danke Dmitry. Übrigens laufen sie im gleichen Sicherheitskontext mit denselben Privilegien. – Laureant