【问题标题】:A Windows Service should load a form at startupWindows 服务应在启动时加载表单
【发布时间】:2013-03-27 11:45:19
【问题描述】:

如何在 Windows 服务的 OnStart 事件中加载“登录表单”?!我知道 Windows 服务与 UI 不兼容。但我需要在不使用 Windows 启动的情况下执行此操作.. 可能吗?如何? 非常感谢。

【问题讨论】:

  • 有可能吗?你试过了吗?
  • 我不知道。我正在寻找一种方法..
  • 直接在stackoverflow上询问,这是你的搜索方式吗?
  • 所以你知道 Windows 服务不应该对 UI 做任何事情但你还是问它?
  • 你的设计可能是错误的。

标签: c# login windows-services windows-authentication


【解决方案1】:

如何在 Windows 服务的 OnStart 事件中加载“登录表单”?

您不能这样做,因为 Windows 服务无法显示用户界面。

我知道 windows 服务与 UI 不兼容。

哦。你已经知道了。很好。

但我需要在不使用 Windows 启动的情况下执行此操作..

这不会改变它不受支持且不起作用的事实。

有可能吗?以及如何?

不,因为:

windows 服务与 UI 不兼容。


那我该怎么办!?!

这里真正的答案是你的设计是错误的。

如果您需要有人登录您的应用程序,则不应创建服务。

只需制作一个标准的 Windows 应用程序(例如,使用 Windows 窗体或 WPF)并将其设置为在任何用户登录计算机时自动启动。这可以通过将快捷方式添加到所有用户的“启动”文件夹来轻松完成。

然后,当您的应用运行时,您可以显示您需要的任何 UI,而不受服务的限制。

【讨论】:

  • “Windows 服务无法显示用户界面”——它们可以。是的,他们不应该这样做,而且这并不容易,但是......
  • 按照设计,服务不显示用户界面。我不确定您是否在谈论存在于 Windows XP 和旧版本中的安全漏洞,或者您是否指的是某种新型的 Session 0 漏洞利用,但我认为这些事情中的任何一个都不会否定我发表的声明。您还可以使用魔术标记并将表格绘制到显示器上。这也不算。
  • 不可能。它不仅没有任何逻辑意义,而且在操作系统的设计中已经明确采取了措施来防止它发生。我已经建议了另一种方式。
  • 我认为您只阅读了部分 cmets。你不应该这样做。不是。 Windows 服务是无人值守的。改变你的设计。
  • 我告诉过你我不会使用启动文件夹。因为用户可以在登录后更改它..我需要类似 Windows-Login-Form ..
【解决方案2】:

如果您需要将 UI 交互与服务结合起来,您应该编写两个程序 - 服务,它公开某种 API,以及一个客户端程序,与该 API 交互(使用您想要选择的任何 IPC 机制)

请记住,多个用户可以登录同一台机器,因此您应该编写所有内容以应对同时运行的客户端程序的多个实例。

【讨论】:

  • 你不仅要处理多个用户登录到机器上的情况,你还必须处理没有个用户登录到机器上的情况。如果还没有人登录,它会在哪里显示登录表单?
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
相关资源
最近更新 更多