【问题标题】:Where is my task bar icon for System user?系统用户的任务栏图标在哪里?
【发布时间】:2011-03-20 04:43:39
【问题描述】:

我创建了一个应用程序,其唯一的 UI 是 Windows 任务栏图标。当应用程序直接启动时(例如在 Windows 资源管理器中双击它),它会正确显示任务栏图标。我需要确保这个应用程序一直在运行。为此,我在 C# 中创建了一个 Windows 服务,它每 10 秒检查一次应用程序是否仍在运行,如果没有,它将通过调用重新启动它

System.Diagnostics.Process.Start("MyApp.exe");

我可以从任务管理器中看到该过程已启动。但是,我找不到任务栏图标。我注意到的一件事是,当它从窗口服务启动时,它以系统用户名运行。

如何使任务栏图标在从 Windows 服务启动时可见?

【问题讨论】:

  • 请尽量避免以 SYSTEM 身份运行您的服务。为此,我认为 LOCALSERVICE 是您所需要的。
  • 为什么需要确保它始终运行?是什么阻止用户停止你的警卫服务然后杀死应用程序?还是应用程序只是不稳定并且经常崩溃?

标签: windows service taskbar notifyicon


【解决方案1】:

服务无法访问与 Vista 或 Win7 上的用户相同的桌面。默认情况下,由其他进程启动的应用程序与启动它们的应用程序具有相同的权限(它们在同一帐户下运行)。您需要让您的服务在用户帐户下运行,或者使用 ImpersonateLoggedOnUser(不确定此功能的 .NET 版本是什么 - 希望您能以此为起点找到它)。

【讨论】:

  • 服务需要使用 CreateProcessAsUser() 函数(或任何 .NET 等效项)运行托盘图标应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多