如何在登录Windows之前启动WPF应用程序?

时间:2011-07-15 12:17:29

标签: c# wpf windows windows-services

我想在登录Windows之前运行WPF应用程序。它不应该只执行任何现有的UI调用ApplicationStartup事件 - 它会触发我需要的函数。

目前我正在将app服务与app结合使用,因此服务在登录前运行。

现在的缺点是我的应用程序在不轮询的情况下不知道该服务正在做什么。

这是一项要求,因为计算机可能会崩溃并重新启动,但Windows启动后仍应运行应用程序。

有什么办法吗?

1 个答案:

答案 0 :(得分:7)

不,这是不可能的。 WPF应用程序是用户模式应用程序,因此它们必须在登录用户的上下文中运行。由于Windows是一个多用户操作系统,操作系统可能正在运行,但没有用户登录。在这种情况下,您的应用程序无法运行。

Windows服务是唯一可以做到这一点的事情,这正是因为它们不能在特定的用户环境下运行。实际上,对于想要创建与用户交互的Windows服务的开发人员来说,同样的功能通常会让人感到沮丧。 That's not possible(至少不是Windows Vista中的版本,patched all the security holes存在于先前版本中。)

替代解决方案:

  • 将您的应用程序添加到默认用户的“Startup”文件夹中,这将强制每次用户登录计算机时启动它。

    在这种情况下,运行的唯一时间是没有用户登录时,在这种情况下很难想象您的应用程序/服务实际上在做任何人

  • 将每台计算机配置为在Windows启动时自动以特定用户身份登录。结合上述内容,您可以解决这样一个事实:即使在崩溃/重启后,计算机也可能在没有用户登录的情况下离开。

虽然具有单独的用户模式应用程序(WPF,WinForms或其他)可以显示UI控件的模式,但在后台运行的Windows服务却非常常见。我不确定你认为这个设置有什么问题。在必要时轮询服务没有任何问题。根据定义,服务不需要用户干预。将需要用户干预的部分分离到一个单独的应用程序中不仅是典型的做法,而且是必要的。