Outlook VSTO表单在发行版(已安装)中不显示

Outlook VSTO表单在发行版(已安装)中不显示,outlook,vsto,outlook-addin,Outlook,Vsto,Outlook Addin,谢谢你的关注 我正在开发一个Outlook插件,它包含一个弹出的表单,其中加载了浏览器,允许用户通过第三方身份验证服务登录 当从调试会话运行时,这非常有效:我看到功能区中的“自定义”选项卡,单击“登录”按钮,然后使用.ShowDialog()将表单作为模式弹出 我正在使用Outlook 2016 问题 当我发布此VSTO并将其安装到我的机器上时,插件将加载,我可以在自定义功能区选项卡中看到“登录”按钮,但单击它不会执行任何操作。我已经检查过,以确保对话框不是简单地在主窗体下弹出的。如果它在那儿,

谢谢你的关注

我正在开发一个Outlook插件,它包含一个弹出的
表单
,其中加载了
浏览器
,允许用户通过第三方身份验证服务登录

当从调试会话运行时,这非常有效:我看到功能区中的“自定义”选项卡,单击“登录”按钮,然后使用.ShowDialog()将表单作为模式弹出

我正在使用Outlook 2016

问题 当我发布此VSTO并将其安装到我的机器上时,插件将加载,我可以在自定义功能区选项卡中看到“登录”按钮,但单击它不会执行任何操作。我已经检查过,以确保对话框不是简单地在主窗体下弹出的。如果它在那儿,我就找不到了

回到调试会话--一切都很好。我怀疑有权限问题,但我没有从Outlook收到任何提示或错误

最后,我不知道它是否相关,但我将VSTO安装程序发送给同事,他们在尝试安装时收到以下错误:

System.Security.SecurityException:此文件中的自定义功能 应用程序将不工作,因为用于签署 {APP NAME REMOVED}的部署清单或其位置不正确 可信的。请与管理员联系以获得进一步帮助


非常感谢您的帮助。

您的表单很可能会显示在Outlook窗口后面。如果希望始终在Outlook窗口顶部查看表单,则需要指定父窗口句柄。
Show
System.Windows.Forms.Form
类的方法允许通过将接口实例作为参数传递来指定父窗口句柄

首先,您需要一个实现该接口的类:

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

   public IntPtr Handle
   {
       get 
       { 
          return _hwnd; 
       }
   }

   private IntPtr _hwnd;
}

在Outlook中,您可以将
Explorer
Inspector
类的实例强制转换到
IOleWindow
界面,并获取可用于
IWin32Window
实现的窗口句柄。

非常感谢Eugene,我添加了这个类,但是我在实现最后一部分时遇到了一点困难。请提供一个获取父窗口引用的示例,好吗?另外,我的对话是从一个单独的线程启动的——我假设这也可能是原因,你认为呢?抱歉--我继承了一个有问题的项目,我不是VSTO或Windows窗体开发人员。再次感谢您的帮助。虽然尤金的回答是正确的,但我发现问题的根本原因与此无关。我认为它对其他人有帮助:加载的弹出窗口依赖于从配置(XML)文件检索的URL。此XML文件在发布版本中不可用。