当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。相关的知识,希望对你有一定的参考价值。

当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。\
我的是VB的网站,已经在网上找了vb代码的片段 不知道怎么用,还有程序中用的是alert的js脚本,用response.write()并没有用messagebox啊 为啥会这样呢?两种提示的结果似乎都不能解决问题,发布在客户作为主机的电脑上就不行,我自己的就可以。愁了,大侠们帮帮我啊~

我也遇到了同样的问题,最后的解决方案是用 Page.ClientScript.RegisterStartupScript(Me.GetType(), "Alert", "<script>alert('操作成功!')</script>") 替换了MsgBox("操作成功") 和 response.write(),这样就实现了我想要的效果。 参考技术A 不好意思这个问题解决不了,你在找其他高手吧!!

当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体

最近在做一个WCF程序的时候,WCF程序老是弹出一个错误“当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定ServiceNotification或DefaultDesktopOnly样式,以显示服务应用程序发出的通知”这个错误的警告,后来通过try catch语句来捕获到了这个错误,并找到了一些提示信息。

很可能由 IncludeExceptionDetailInFaults=true 创建的 ExceptionDetail,其值为:
System.InvalidOperationException: 当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。
在 System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp)
在 System.Windows.Forms.MessageBox.Show(String text)
在 DataProvider.Utils.SQLServerHelper.Open() 位置 c:\Users\2457\Desktop\宁波市公路局\DataProvider(2015-10-26-最终版)\Utils\DataBaseSQLServerHelper.cs:行号 33
在 DataProvider.Utils.SQLServerHelper..ctor(String connectStr) 位置 c:\Users\2457\Desktop\宁波市公路局\DataProvider(2015-10-26-最终版)\Utils\DataBaseSQLServerHelper.cs:行号 21
在 DataProvider.Announcement..ctor() 位置 c:\Users\2457\Desktop\宁波市公路局\DataProvider(2015-10-26-最终版)\Announcement.cs:行号 21
在 CreateDataProvider.Announcement()
在 System.ServiceModel.Dispatcher.InstanceProvider.GetInstance(InstanceContext instanceContext, Message message)
在 System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance(InstanceContext instanceContext, Message request)
在 System.ServiceModel.InstanceContext.GetServiceInstance(Message message)
在 System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance(MessageRpc& rpc)
在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
在 System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)}

    看到这些堆栈的调用信息之后,System.Windows.Forms.MessageBox.ShowCore这个是问题的核心,也就是在WCF程序中是不能出现窗体的相关代码,比如MessageBox、OpenFileDialog等相关代码,如果出现这些信息,程序就会经常出现这个错误,应为我们的WCF程序是部署在IIS上面的,IIS是不允许这样处理的。然后再看看我们的代码。

private void Open()
{
  try
  {
    sqlConn.Open();//打开数据库
  }
  catch (Exception ex)
  {
    //MessageBox.Show(ex.Message);
  }
}

然后去掉整个程序中出现的MessageBox就可以了。通过这个BUG至少可以得出两点结论:

   1  必须学会使用try catch去捕获未知的错误,然后去查找相关的堆栈信息,然后一步步根据提示来解决问题。

   2  WCF程序中必须不能使用任何和窗体相关的类或者代码。

以上是关于当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。的主要内容,如果未能解决你的问题,请参考以下文章

C#打印图片设置报错 当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。

巧用Environment.UserInteractive 实现开发和生产环境的分开调试部署

asp.net web服务应用程序问题 高手速进 c#

DispatchQueue.global(qos: .userInteractive).async 是不是与 DispatchQueue.main.async 相同

C#在win7系统 iis部署asp.net导出excel功能报错

当用户以“ADMIN”角色而不是以“USER”角色登录时,访问被拒绝