当应用程序未在UserInteractive中运行时,创建表单失败

时间:2017-01-02 15:58:22

标签: c# winforms

这是我的代码:

GetTokenForm gtf = new GetTokenForm(true, true);
gtfResult = gtf.ShowDialog(this);

其中GetTokenForm是一个包含WebView控件的简单WinForm。 WebView打开一个URL并在页面上执行一些JavaScript。当应用程序在"传统"中开始时,一切都运行良好。用户的方式。

但是当从任务计划程序启动应用程序时,第二行会抛出一个众所周知的异常:

  

在应用程序未运行时显示模式对话框或表单   在UserInteractive模式下不是有效的操作。指定   ServiceNotification或DefaultDesktopOnly样式显示一个   来自服务应用程序的通知。

如果是MessageBox,您可以通过添加MessageBoxOptions.ServiceNotification选项来解决此问题。

但是如何使用我的自定义表单实现相同的效果?不需要显示它,因为我的目标只是在WebView上加载页面并在完成后销毁表单。

2 个答案:

答案 0 :(得分:0)

GUI应用程序需要一个桌面,如果用户已登录并且任务配置为仅在用户登录时才运行,则只能获得一个桌面。

因此,在用户帐户下安排任务并确保让该用户登录,以便在应用程序启动时,它将以交互模式在该帐户下运行。

修改

如果任务需要在没有用户登录的情况下运行,则任务不应该打开表单或依赖表单。只需更改代码的设计,使其不依赖于表单。

答案 1 :(得分:0)

由于您在表单上使用的控件需要一个Windows消息泵,您需要以交互模式运行任务。尝试使用 / IT 参数运行任务。

以下是MSDN help link,其中详细介绍了