我有一个c#应用程序,它在一台机器上的System帐户下启动,并向用户显示一些对话框。当常规用户注销时,应用程序也会终止。我原本以为,由于它在系统帐户下运行,它会继续运行,尽管用户没有登录。
有关为何会发生这种情况的任何信息都将受到赞赏。
答案 0 :(得分:5)
您的应用程序是服务吗?听起来你想要的是一种服务。请注意,您可以像任何用户一样运行任何进程,但这不会使其成为服务。如果您的流程是作为服务实现的,那么即使没有用户登录,它也会继续运行。
答案 1 :(得分:4)
如果您希望自己的应用在用户注销后继续运行(例如,只要计算机正在运行就维持状态),则需要一项服务。但是,强烈建议不要显示UI。如果您需要长时间运行和UI,请考虑编写用于存储数据的服务,以及每次用户登录时运行的应用程序,该应用程序显示UI并与服务进行交互。
答案 2 :(得分:2)
当用户会话结束他们调用的应用程序时,这是一项安全功能。如果您需要在用户会话之外运行应用程序,则需要一项服务,因为它在其自己的会话服务中无法通过消息等“进入”用户会话。
答案 3 :(得分:1)
您需要将您的应用程序作为Windows服务运行。
答案 4 :(得分:1)
您需要将应用程序创建为Windows服务。如果您的应用程序显示对话框,则需要选中“允许服务与桌面交互”并在本地系统帐户下运行它。
但是,更好的方法是使用WCF或Remoting从应用程序公开可查询的接口,您可以使用单独的应用程序向用户显示该接口。如果您希望在没有人登录时通过您的应用程序发送通知,那么您可能需要考虑发送电子邮件或将事件发布到单独的WCF / Web服务/远程处理终端。
答案 5 :(得分:0)
由于该进程是由explorer.exe启动的,因此无论用户在哪个帐户运行,都会在用户注销时终止该进程。这就是Windows工作的方式。为了允许进程继续运行,它需要是一个服务,或者可能由任务调度程序启动。