【问题标题】:c# Windows Service Console.Writelnc# Windows 服务控制台.Writeln
【发布时间】:2019-03-30 01:28:23
【问题描述】:

我在 C# 中编写、安装并成功启动了一个 Windows 服务,它什么都不做网络启动时提示“我的服务”这些消息在哪里显示?

我愿意接受更好的方法。我对此很陌生,通过在控制台上回响我的进度,一步一步地感受我的方式。我应该回显到事件日志吗?我该怎么做?(我知道,我知道,谷歌它)

 protected override void OnStart(string[] args)
    {
        base.OnStart(args);
        Console.WriteLine("Sham-Wow!");
    }

【问题讨论】:

  • @Nico:Stackoverflow 不鼓励“去谷歌搜索”和 RTFM。该网站也旨在回答常见问题解答。这让我想起了,有 c# FAQ 吗?
  • RTFM,我没听说过。多么棒的首字母缩略词。

标签: c# windows-services console


【解决方案1】:

您不能从 Windows 服务写入控制台。

我建议您使用任何日志记录实用程序,例如 log4net

第二种选择是写信给Event Log (System.Diagnostics.EventLog)

【讨论】:

    【解决方案2】:

    尝试System.Diagnostics.Trace.WriteLine,您将在 Visual Studio 的输出窗口或使用 dbgview 实用程序中看到您的消息。

    【讨论】:

      【解决方案3】:

      如果您想将应用程序作为控制台应用程序(这样您可以看到控制台输出)或作为服务运行,您可以通过以下方式实现:

      • 确保您的应用程序编译为控制台应用程序。
      • 更改应用程序的 Main 方法,以便您可以分支以执行服务或控制台。
      • 按如下方式运行您的应用程序以获取控制台“myservice.exe /console”。

      我已经做了好几年了,所以可能需要稍微调整一下,但如下所示:

      static void Main(string[]] args) 
      { 
          if (args.Length == 0)
          {
                //Service entry
                System.ServiceProcess.ServiceBase[] services; 
                services = new System.ServiceProcess.ServiceBase[] { new WinService1() }; 
                System.ServiceProcess.ServiceBase.Run(services);
          }
          else
          {
                //Console entry
                OnStart(args);
          } 
      }
      
      protected override void OnStart(string[] args)
      {
          base.OnStart(args);
          Console.WriteLine("Sham-Wow!");
      }
      

      这对于一些早期的实验来说很好,但是一旦你对事情有所了解,我会推荐 Log4Net。

      【讨论】:

        【解决方案4】:

        传达服务状态的最常见/公认的方式是写入 Windows 事件日志。

        为了便于调试,我建议您将所有业务代码放入与服务组件不同的类中。然后,您可以从您的服务或控制台应用程序中使用该类。在创建服务时,您将使用控制台应用程序来托管您的组件,以便您可以轻松地单步执行代码。

        【讨论】:

          【解决方案5】:

          非常老的问题,但非常相关。这就是我实现日志机制的方式,我可以在 Windows 服务运行时对其进行检查。

          • 创建一个日志文件。我最喜欢的是前面提到的 Log4net。
          • 打开 PowerShell 并运行此命令 Get-Content "path/to/file.log" -Wait

          您将能够在文件更改时对其进行监控。这就像 linux 中的tail 命令。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多