如何阻止WPF应用程序以非交互方式运行?

时间:2013-03-21 15:26:25

标签: .net wpf

在开发WPF应用程序时,我试图以非交互方式停止执行应用程序。此应用程序用于用户将作业提交到Windows群集的环境中,有时他们会在意外时提交UI代码。这些实例最终会在服务器上运行,直到有人识别出其存在并终止该过程。

根据多个问题(#1#2#3)的答案提供建议,我使用Environment.UserInteractive实现了以下代码,以停止非交互式使用:< / p>

private void Application_Startup (object sender, StartupEventArgs e)
{
    if (Environment.UserInteractive)
    {
        var window = new MainWindow();
        window.Show();
    }
}

使用Windows 7任务计划程序进行的快速测试显示该过程仍然有效!因为无论用户是否登录,任务都设置为运行,我在任何地方都看不到窗口,也不确定Environment.UserInteractive是否返回true

那么如何检测WPF应用程序是否以非交互方式运行?

1 个答案:

答案 0 :(得分:0)

显然,建议是正确的,Environment.UserInteractive 返回false。然而,最终发生的事情是WPF调度员继续,无论是否存在窗口。当您阅读Application.ShutdownMode的评论时,这一点就变得很明显了:

  

只有在调用Shutdown的{​​{1}}方法时,应用程序才会停止运行。关闭可以隐式或显式发生,由Application属性的值指定。

为了实际阻止WPF进程以非交互方式运行,您必须告诉它停止运行!

ShutdownMode

一旦您向Application.Shutdown添加了一个电话,当以非交互方式运行时,该过程会以一种很好的方式拆除!

  

任务计划程序成功完成任务“\ RunTest”,实例“{0d4e6506-b12b-4181-8a75-17754ddef81c}”,操作“\\ networkshare \ path \ to \ Executable.exe”,返回码为1。