【问题标题】:Modal dialogbox or form error in IISIIS 中的模态对话框或表单错误
【发布时间】:2011-09-24 11:15:26
【问题描述】:

当我在服务器机器(Windows 7、IIS 7)中部署我的应用程序时,我不断收到此错误。 “当应用程序未在 UserInteractive 模式下运行时显示模式对话框或表单不是有效操作。指定 ServiceNotification 或 DefaultDesktopOnly 样式以显示来自服务应用程序的通知。”

问题是我在代码中没有任何 MessageBox 调用。我所做的是,从 PowerBuilder 12 生成一个 DLL,并将该 DLL 添加到 .NET 网站中以生成一些报告。有什么解决办法吗?如果您需要我提供任何其他信息,请告诉我。我真的需要这方面的帮助。

这是堆栈跟踪:

[InvalidOperationException: 显示模态对话框或表单时 应用程序未在 UserInteractive 模式下运行是无效的 手术。指定 ServiceNotification 或 DefaultDesktopOnly 样式 显示来自服务应用程序的通知。]
System.Windows.Forms.MessageBox.ShowCore(IWin32Window 所有者,字符串 文本、字符串标题、MessageBoxButtons 按钮、MessageBoxIcon 图标、 MessageBoxDefaultButton defaultButton、MessageBoxOptions 选项、 布尔显示帮助)+2661926
System.Windows.Forms.MessageBox.Show(字符串文本)+37
c__app_web_main.InitAssembly() +168 APP_WEB.n_app_web_main..ctor() +18 ASP_TEST.getobject.GetData(String queryString) in C:\Projects\ERP\ASP_TEST\ASP_TEST\getobject.aspx.cs:29
ASP_TEST.getobject.Page_Load(Object sender, EventArgs e) in C:\Projects\ERP\ASP_TEST\ASP_TEST\getobject.aspx.cs:20
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,对象 o,对象 t,EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象发送者, EventArgs e) +35 System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔型 includeStagesAfterAsyncPoint) +627

编辑: 当我初始化 PB 生成的程序集时会出现问题,它向我抛出异常并试图用消息框警告我。该程序集在我的本地电脑和我的同事中运行良好,因此必须在 IIS 中进行一些安全设置,这会导致此问题。

【问题讨论】:

  • 这是由 PowerBuilder 引起的问题。它可能试图警告您某些事情,但这不可能发生。不要使用它。 forums.sybase.com/cgi-bin/…
  • 嗯,当我将它部署在本地 IIS 中时,这工作正常,也在我的同事 PC 中(都使用 Windows 7 和 IIS 7)......问题必须与帐户权限有关IIS 正在运行。
  • 另外,在您提供的链接中,他似乎设法找到了解决方案:forums.sybase.com/cgi-bin/…

标签: c# .net iis


【解决方案1】:

我敢打赌,如果你使用ILSpy 反编译 DLL,你会发现对 Message.Box 的引用。您可能可以恢复源代码并删除有问题的代码。

【讨论】:

  • 好吧,即使我从源中删除 MessageBox 调用,我也无法处理导致 MessageBox 显示的异常,直到我知道是什么导致了问题。
  • 好吧,如果你有源,我想你也能做到,不是吗?您以前听说过调试器和断点吗?
【解决方案2】:

通过使用密钥对 PowerBuilder 12 生成的自定义 DLL 进行签名解决了这个问题。

【讨论】:

  • ShutterBug,我现在也遇到了同样的问题。您是如何使用密钥对 DLL 进行签名的?
  • 有几种方式,我用的是PowerBuilder内置的部署工具。
  • 您在执行此操作时选择了哪些选项?你只标记延迟标志吗?或者您是否使用 Allow Partially Trusted Caller 属性标记程序集?
  • 我从 CMD 生成了一个密钥文件,并使用该密钥文件对使用 PowerBuilder 自己的部署实用程序从 PowerBuilder 12 生成的 DLL 进行签名。
  • 在我们的例子中,我们收到这条消息是因为有人从服务器上删除了 atl71.dll(我们的 web 服务的部署 dll 之一)。一旦我们重新添加了这个 DLL,我们就不会再收到这个错误了。事实证明,它与实际的 PB 网络服务无关。
猜你喜欢
  • 2012-02-14
  • 2010-10-15
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
  • 2012-03-10
  • 1970-01-01
相关资源
最近更新 更多