【问题标题】:Why does an application running as the system account on windows when logging off为什么注销时应用程序在Windows上以系统帐户身份运行
【发布时间】:2009-06-09 15:24:28
【问题描述】:

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

任何关于为什么会发生这种情况的信息将不胜感激。

【问题讨论】:

  • 嗨 Trotts,你有什么解决办法吗?

标签: c# windows logoff


【解决方案1】:

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

【讨论】:

  • ...然后,由于强烈不鼓励服务使用 UI,因此请在某些远程接口上使用单独的进程与用户进行通信。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-02
            • 2011-03-27
            • 1970-01-01
            相关资源
            最近更新 更多