2016-09-19 121 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开发人员。再次感谢你的帮助。 –

相关问题