2016-09-19 117 views
-1

感謝您的期待。Outlook VSTO表單不會在發佈版本中顯示(安裝)

我正在使用一個Outlook插件,其中包含一個彈出窗口Form,其中加載了一個browser以允許用戶通過第三方身份驗證服務登錄。

從調試會話運行時,這很有用:我在功能區中看到自定義選項卡,單擊「登錄」按鈕,然後使用.ShowDialog()作爲模式彈出窗體。

我使用Outlook 2016

問題

當我發佈這個VSTO,然後在我的機器上安裝,插件加載,我可以看到在自定義功能區選項卡的「登錄」按鈕,但點擊它什麼都不做。我已經檢查過,確保對話不是簡單地在主窗體下彈出。如果它在那裏 - 我找不到它。

返回調試會話 - 一切正常。我懷疑存在權限問題,但我沒有收到來自Outlook的任何提示或錯誤。

最後,我不知道這是否是相關的,但我把VSTO安裝給同事,他們得到試圖安裝時出現以下錯誤:

System.Security.SecurityException:自定義功能在此 應用程序將不起作用,因爲用於爲{APP NAME REMOVED}或其位置簽署 部署清單的證書或其位置不是 可信。請聯繫您的管理員以獲取進一步幫助

任何幫助,非常感謝。

+0

雖然尤金的回答是正確的,但我發現問題的根本原因是不相關的。我們可以幫助其他人:加載的彈出窗口取決於從配置(XML)文件中檢索的URL。此XML文件在發行版中不可用。 –

回答

1

很可能您的表單顯示在Outlook窗口後面。如果您希望始終在Outlook窗口頂部查看錶單,則需要指定父窗口句柄。 System.Windows.Forms.Form類的ShowShowDialog方法允許通過傳遞IWin32Window接口的實例作爲參數來指定父窗口句柄。

首先,你需要它實現該接口的類:

public class WindowWrapper : System.Windows.Forms.IWin32Window 
{ 
    public WindowWrapper(IntPtr handle) 
    { 
     _hwnd = handle; 
    } 

    public IntPtr Handle 
    { 
     get 
     { 
      return _hwnd; 
     } 
    } 

    private IntPtr _hwnd; 
} 

在Outlook中,就可以把ExplorerInspector類的實例到IOleWindow接口,並獲得可用於窗口句柄IWin32Window執行。

+0

非常感謝Eugene,我添加了這個類,但是在實現最後一部分時遇到了一些麻煩。你會提供一個獲取父窗口引用的例子嗎?另外,我的對話是從一個單獨的線程發起的 - 我假設這也可能是原因,您怎麼看?道歉 - 我繼承了一個心疼的項目,我不是VSTO或Windows Forms開發人員。再次感謝你的幫助。 –

相關問題