簡體   English   中英

C#在VSTO加載項中獲取正在運行的Outlook實例

[英]C# Get running Outlook instance in VSTO add-in

我正在嘗試在Excel加載項中獲取Outlook Application對象。

如果有一個正在運行的Outlook實例,則應該得到它;如果沒有,則應該使用Outlook對象模型創建一個。

這是我現在擁有的代碼:

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;
}

我的問題:它找到Outlook進程,但找不到它們,並拋出以下錯誤消息:

操作不可用(來自HRESULT的異常:0x800401E3(MK_E_UNAVAILABLE))

我嘗試逐步調試它,並監視任務管理器。 我可以看到我有一個Outlook實例,但這只是任務欄右側的一個圖標。 這是否意味着實例尚未完全加載,並且無法從中獲取Application對象?

我最終修改了我的代碼,並將if-else分為2個try-catches,並帶有各自的返回值,但是我仍然認為上面的代碼應該可用。

Outlook是單例,因此new Outlook.Application()將始終有效-如果它已經在運行,則將獲得該正在運行的對象。

確保兩個應用程序(Excel和Outlook)都在相同的安全上下文中運行。 任一應用程序是否都以提升的特權運行(以管理員身份運行)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM