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