2016-06-02 12 views
2

Ich versuche, zu Outlook-Anwendung von Windows Service Hook, aber eine Ausnahme erhalten Operation nicht verfügbar (Ausnahme von HRESULT: 0x800401E3 (MK_E_UNAVAILABLE)) Hier ist mein Code.Operation nicht verfügbar (Ausnahme von HRESULT: 0x800401E3 (MK_E_UNAVAILABLE)) beim Ausführen von Windows-Dienst?

aber der gleiche Code, wenn ich es über Windows Form Application starten funktioniert es gut. Ich ging durch einige Websites und sie sagten, dass Outlook-Objekt nicht in ROT-Tabelle ist. Was wird die Lösung sein?

+0

Ich würde * raten *, dass du das nicht über alle Sitzungen hinweg machen kannst. Ihr Dienst muss möglicherweise Code in der Benutzersitzung starten, wenn er mit der Outlook-Instanz des Benutzers kommunizieren möchte. (Was würden Sie erwarten, dass der gepostete Code ausgeführt wird, wenn zwei oder mehr Benutzer Outlook gleichzeitig ausführen?) –

Antwort

1

Zwei häufige Probleme könnten dies verursachen.

Die erste wäre, dass Sie Visual Studio im Administratormodus ausführen und starten Sie Ihr Programm innerhalb von VS, und die Office-Anwendung ist nicht. Um dies zu beheben, müssen Sie Ihre Office-Anwendung auch im Administratormodus mit erhöhten Rechten ausführen.

Der zweite Fehler kann dadurch verursacht werden, dass die Anwendung beim Aufruf Marshal.GetActiveObject(...) nicht vollständig gestartet/geladen wird.

+0

Leider ist das nicht korrekt, aber Dmitrys Antwort ist –

2

Outlook oder eine andere Office-App kann nicht in einem Windows-Dienst ausgeführt werden, auch wenn Ihr Dienst als interaktiver Benutzer ausgeführt wird. Nur Extended MAPI (nur C++ oder Delphi) oder ein Extended MAPI-Wrapper wie Redemption (seine RDO Familienobjekte) können in einem Dienst verwendet werden.

In Ihrem speziellen Fall sieht es so aus, als ob Sie versuchen, das Ereignis Application.ItemSend zu fangen. Es gibt absolut keinen Grund, einen Windows-Dienst dafür zu erstellen. Erstellen Sie ein COM-Add-In - es wird von Outlook geladen und ausgeführt, solange Outlook selbst ausgeführt wird.

+0

hallo dmitry Ich habe eine winforms-Anwendung erstellt, die absolut gut und in der Lage funktioniert um ein Ereignis zu erhalten und alle Details zu erfassen, möchte ich, dass es im Hintergrund als Dienste ausgeführt wird und stillschweigend alle Details erfasst. :) –

+0

Noch einmal, Sie werden nicht in der Lage sein, da die Sicherheitskontexte unterschiedlich sind. Sie müssen wirklich ein COM-Addin (DLL) schreiben, das von Outlook in-proc geladen wird. –

0

Sie Ihre Anwendung nicht als Dienst haben müssen, um es auf dem Hintergrund zu bekommen ...

wenn Ihre winform Arbeit gut, nur Ihre winform im Hintergrund auf dem Systray zum Beispiel Laufen setzen

Verwandte Themen