代码之家  ›  专栏  ›  技术社区  ›  PassionateDeveloper

如何在windows服务中执行操作?

  •  0
  • PassionateDeveloper  · 技术社区  · 15 年前

    我有一个应用程序,由我用C.NET 2.0编写-当应用程序打开时,计时器将每3秒检查一次X。如果发生X,它将以Windows窗体显示警告。

    是否可以在Windows服务中安装此计时器和Windows窗体调用?所以每次系统启动时计时器都会发出滴答声,然后显示消息?

    4 回复  |  直到 15 年前
        1
  •  3
  •   Treb    15 年前
    1. 不,不可能让服务显示窗体。这是 按设计 ,因为服务应该在没有用户界面的情况下运行
    2. 您可以有一个常规应用程序与您的服务通信并显示警告,但我不知道具体是如何做到的。
    3. 我知道,你没有 需要 服务只需创建一个常规应用程序,而不需要在后台运行主窗体,即可执行检查,并在必要时显示警告。您可以将该应用程序添加到 Run 截面 HKLM HKCU ,以便在用户登录到系统时始终启动。
        2
  •  2
  •   Raj More    15 年前

    无法从Windows服务显示Windows窗体。服务只在后台运行。

    您可以使用单独的windows应用程序与windows服务通信,并显示警告、信息等。

    为此,服务在localsystem帐户上运行,您必须启用该属性才能使服务与桌面交互。

        3
  •  0
  •   Remus Rusanu    15 年前

    禁止服务与桌面交互,包括显示窗口或窗体。在Windows 2003和XP中,您可以通过将服务标记为“交互式”来解决此问题,这将允许服务在用户会话中显示,但从Windows 2008和Vista开始,这是强制的,并且服务不能再以任何方式与用户交互。

    当服务需要显示任何内容时,解决方案是将逻辑分成两个独立的进程,一个是服务,另一个是普通用户进程。用户进程由用户在其会话中启动(可以在会话启动时自动启动),并通过某些IPC通道(共享内存、命名管道、套接字等)连接到服务。然后,服务可以通过要求用户处理应用程序的一半来显示它需要显示的内容,从而向用户显示它希望显示的任何内容。

        4
  •  0
  •   Randolpho    15 年前

    正如其他人所说,请记住,windows服务应该是一个后台,而不是与用户程序交互。许多服务甚至在用户未登录的情况下运行——当没有桌面供其显示窗体时,它们将如何继续显示窗体?

    这就是说,你应该是想把某件东西塞进一个不应该是服务的服务中。如果你想要一些在后台运行并且仍然与用户交互的东西,可以考虑制作一个轻量级的系统try应用程序。事实上…以下是一个有用的教程:

    Lightweight System Tray Application (NotifyIcon Based)

    推荐文章