【问题标题】:Windows Service + Run application in System TrayWindows 服务 + 在系统托盘中运行应用程序
【发布时间】:2012-08-14 20:43:19
【问题描述】:

我有一个在服务器中运行的 Delphi 应用程序。这个应用程序对我的数据库进行了一些关键的工作,这些工作在其他应用程序中使用并在用户登录到 Windows 时执行。一切正常,但是,服务器的管理员有时会重新启动服务器并且没有登录到 Windows。服务器停留在 Windows 登录中,我的应用程序没有启动。

经过一个小的研究,我决定创建一个 Windows 服务来启动我的应用程序,甚至在用户登录 Windows 之前。但是,我有两种形式。一个表单显示我的应用程序正在执行的当前进程,另一个编辑一个用于配置第一个表单的 .ini 文件。

我需要做的是创建一个服务,在用户登录 Windows 之前和登录后启动我的应用程序,显示我的表单或打开它但将其最小化到系统托盘。

是否可以通过这种行为使用 Windows 服务并将我的表单最小化到系统托盘?

【问题讨论】:

  • 最后,您将按照this question 中的建议之一将 gui 与 db 工作分开,以便相互交互。

标签: delphi windows-services delphi-2010 system-tray


【解决方案1】:

从 Vista 开始,服务根本无法显示 UI(包括系统托盘图标),在早期版本中不鼓励这样做。在所有版本的 Windows 中,您应该将 UI 分离到其自己的非服务应用程序中,该应用程序可由登录用户运行,管理该用户托盘的系统托盘图标,并根据需要使用与后端服务通信任意数量的可用 IPC 机制(管道、套接字、COM、RPC、WCF 等)。

【讨论】:

  • 好建议!有关此主题的更多信息,请参阅 Windows 服务常见问题解答中的 "Should a Windows Service have a GUI?"
  • 好吧,我已经知道我不能将 UI 与服务一起使用,我只是想确认一下。我将我的应用程序分成两个应用程序。一个作为服务,另一个作为带有表单的简单配置程序。甚至在用户登录 Windows 之前,是否有任何特定的服务配置启动?感谢您的回答,这对我有很大帮助。
  • 假设您使用的是 Delphi 的 TService 类,它的 StartType 属性控制服务何时启动。默认设置为stAuto,即操作系统启动时服务会自动启动。
  • 我解决了这个问题。有一个服务在后台进行艰苦的工作,还有一个简单的可视化应用程序来配置服务中使用的文件。谢谢大家的帮助。
【解决方案2】:

好吧,您可以在服务中拥有一个表单,但必须以管理员身份运行,并且必须设置为交互式服务。

我使用 SVCOM 创建了带有托盘图标和可以最小化到系统托盘的表单的漂亮服务。

看看这里:http://www.aldyn.ru/products/index.html

希望对你有帮助

【讨论】:

  • SvCom 看起来像一个方便的工具,但从技术上讲,它不能在 Windows 服务应用程序中使用字面意义上的表单。它仍然生成两个独立的应用程序并将它们集成在一起。你可以调整你的答案,提到这样的工具可以帮助建立这样的联系,而不是说一些实际上不可能的事情(使用新技术)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多