感谢您的光临。
我正在开发一个Outlook插件,其中包含一个弹出窗口Form
,可在其中加载browser
以允许用户通过第三方身份验证服务登录。
从调试会话运行时效果很好:我在功能区中看到自定义选项卡,单击"登录"按钮,表单弹出为模态使用.ShowDialog()。
我正在使用Outlook 2016。
当我发布此VSTO然后在我的机器上安装它时,插件加载,我可以看到"登录"自定义功能区选项卡中的按钮,但单击它不会执行任何操作我已经检查过以确保对话框不会简单地弹出主窗体。如果它在那里 - 我找不到它。
回到调试会话 - 一切都很好。我怀疑是权限问题,但我没有从Outlook获得任何提示或错误。
最后,我不知道它是否相关,但我将VSTO安装程序发送给同事,他们在尝试安装时遇到以下错误:
System.Security.SecurityException:此处的自定义功能 应用程序将无法正常工作,因为用于签署的证书 {APP NAME REMOVED}的部署清单或其位置不是 值得信赖的。请联系您的管理员以获得进一步的帮助。
非常感谢任何帮助。
答案 0 :(得分:1)
很可能您的表单显示在Outlook窗口后面。如果要始终在Outlook窗口上查看表单,则需要指定父窗口句柄。 Show
类的System.Windows.Forms.Form
和ShowDialog方法允许通过将IWin32Window接口的实例作为参数传递来指定父窗口句柄。
首先,您需要一个实现该接口的类:
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
实现的窗口句柄。