注销时,为什么应用程序在Windows上作为系统帐户运行

时间:2009-06-09 15:24:28

标签: c# windows logoff

我有一个c#应用程序,它在一台机器上的System帐户下启动,并向用户显示一些对话框。当常规用户注销时,应用程序也会终止。我原本以为,由于它在系统帐户下运行,它会继续运行,尽管用户没有登录。

有关为何会发生这种情况的任何信息都将受到赞赏。

6 个答案:

答案 0 :(得分:5)

您的应用程序是服务吗?听起来你想要的是一种服务。请注意,您可以像任何用户一样运行任何进程,但这不会使其成为服务。如果您的流程是作为服务实现的,那么即使没有用户登录,它也会继续运行。

答案 1 :(得分:4)

如果您希望自己的应用在用户注销后继续运行(例如,只要计算机正在运行就维持状态),则需要一项服务。但是,强烈建议不要显示UI。如果您需要长时间运行和UI,请考虑编写用于存储数据的服务,以及每次用户登录时运行的应用程序,该应用程序显示UI并与服务进行交互。

答案 2 :(得分:2)

当用户会话结束他们调用的应用程序时,这是一项安全功能。如果您需要在用户会话之外运行应用程序,则需要一项服务,因为它在其自己的会话服务中无法通过消息等“进入”用户会话。

答案 3 :(得分:1)

您需要将您的应用程序作为Windows服务运行。

答案 4 :(得分:1)

您需要将应用程序创建为Windows服务。如果您的应用程序显示对话框,则需要选中“允许服务与桌面交互”并在本地系统帐户下运行它。

但是,更好的方法是使用WCF或Remoting从应用程序公开可查询的接口,您可以使用单独的应用程序向用户显示该接口。如果您希望在没有人登录时通过您的应用程序发送通知,那么您可能需要考虑发送电子邮件或将事件发布到单独的WCF / Web服务/远程处理终端。

答案 5 :(得分:0)

由于该进程是由explorer.exe启动的,因此无论用户在哪个帐户运行,都会在用户注销时终止该进程。这就是Windows工作的方式。为了允许进程继续运行,它需要是一个服务,或者可能由任务调度程序启动。