在开发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应用程序是否以非交互方式运行?
答案 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。