【问题标题】:Windows Service General QuestionsWindows 服务一般问题
【发布时间】:2011-08-31 13:04:40
【问题描述】:

今天我用 C# 构建了我的第一个 Windows 服务。

我有一些问题,如果你能帮助我,我会很高兴和感激。

1) 当我安装我的服务时,它正在运行并且一切正常,但它不会出现在 Windows 任务管理器中。有人知道为什么吗?

2) 如果我想放置一个系统托盘,我不能这样做——因为我不能放置一个图标。在窗口服务中没有 System.Drawing.. 我该怎么办?

3)

protected override void OnContinue()
{
    //eventLog1.WriteEntry("In OnContinue.");
}

这个“OnContinue”有什么作用?

我无法理解它。

【问题讨论】:

    标签: c# windows-services


    【解决方案1】:

    服务未显示在 Windows 任务管理器中

    我假设您在 Vista/Windows 7 上运行,并且您的服务没有作为您的帐户运行。因此,您需要在任务管理器的“进程”选项卡上说“显示所有用户的进程”,然后您应该会看到您的服务(可能在 default Windows accounts 之一下运行)。

    您不会在“应用程序”标签中看到您的服务,服务不会出现在那里。

    Windows 服务图标托盘

    从 Windows Vista 开始,不允许服务与桌面交互;即使您仍然可以这样做,您与哪一个交互(可能有多个用户登录到具有多个桌面的机器上,想想终端服务器/多个远程桌面会话)?

    显示服务图标的方式是创建一个与服务通信的程序(使用 WCF 或 Remoting 之类的东西),该程序负责在托盘中显示图标。

    请记住,您的服务很可能不需要托盘中的图标,而是为Microsoft Management Console 创建一个插件并通过 WCF/Remoting 与该服务通信。

    继续

    来自documentation for the OnContinue method

    在派生类中实现时,OnContinue 在 Continue 时运行 命令由服务控制管理器 (SCM) 发送到服务。 指定服务恢复正常运行时要执行的操作 暂停后。

    基本上,如果您的服务可以暂停(不停止),那么当服务恢复时会调用它。

    【讨论】:

    • 该死!你回答了我想要的一切!你的帅哥!谢谢allllooottt!
    • @Alon M:没问题,很乐意提供帮助。 =)
    【解决方案2】:

    1) 如果服务在“服务”管理控制台中显示为正在运行 - 那么您应该在服务的任务管理器中看到一个进程。您不会在“应用程序”选项卡上看到任何内容 - 因为服务在后台运行。但是,在“进程”选项卡中 - 您应该会看到用于安装服务的可执行文件的条目。

    3) Windows 服务中的OnContinue() 方法定义了当服务从“暂停”状态返回“已启动”状态时将发生的操作。

    【讨论】:

    • 对于 1.,我认为它将在众多 svchost.exe 进程之一下运行。对其他两个更正(尽管尝试从服务与用户桌面交互是不好的做法,所以 2 可能不是一个好主意...)
    • @jadarnel27 - 我编写了几个服务,它们总是使用我的项目编译到的可执行文件的名称显示在进程列表中。
    • 哇。我疯了。我刚刚查看了我 PC 上的任务管理器,我编写的服务正在以可执行名称运行(如您所说)。为你+1。 -1 对我 =)
    • @pmartin:你肯定无法使用 Vista/Windows 7 与桌面交互,所以#2 肯定是错误的。尝试创建窗口将失败。
    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2010-10-19
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多