Windows服务输出未显示在事件日志中

fee*_*nst 6 c# windows windows-services event-log windows-7-x64

我试图按照这个演练.

我正在使用Visual Studio 2010 Premium.

我在服务器资源管理器或事件查看器中看到的唯一事件是"服务已成功启动".并且"服务已成功停止".

这是服务代码:

namespace MyNewService
{
    public partial class MyNewService : ServiceBase
    {
        public MyNewService()
        {
            InitializeComponent();
            if (!EventLog.SourceExists("MySource"))
            {
                EventLog.CreateEventSource("MySource", "MyNewLog");
            }
            eventLog1.Source = "MySource";
            eventLog1.Log = "MyNewLog";
        }

        protected override void OnStart(string[] args)
        {
            eventLog1.WriteEntry("In OnStart");
        }

        protected override void OnStop()
        {
            eventLog1.WriteEntry("In onStop.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Sco*_*Bai 0

可能是权限问题。就像评论者所说,尝试以管理员身份运行 VStudio 或编译的服务。

另外,您仍然可以调试服务 - 将 thread.Sleep(最多 20 秒)作为第一行(以便给自己时间附加调试器),然后在后面的行上放置一个断点。然后转到“工具”-->“附加到进程”并选择您的 .exe。如果您在 Thread.Sleep() 结束之前完成了该操作,那么您应该中断。

请记住,服务必须在 IIRC 30 秒内完成 OnStart,否则 Windows 会认为它没有响应并终止您的进程,因此,如果您要进行大量调试,请将代码移出服务启动。只要在里面放一个计时器什么的就可以了。

为了更容易调试,请考虑将您的功能移至 DLL,然后将您的服务保留在足够的代码中以调用您的 DLL - 这将简化单元测试和调试 - 但不要忘记,当您执行以下操作时,很多事情都会发生变化实际上将其作为服务运行。