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

时间:2011-09-23 21:42:22

标签: c# windows windows-services event-log windows-7-x64

我正在尝试遵循此walkthrough

我正在使用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.");
        }
    }
}

3 个答案:

答案 0 :(得分:2)

我在Win 7 64上遇到与Visual Studio 2010 Professional相同的问题。我新安装的服务是在以管理员身份运行的InstallUtil.exe上安装的。它正确启动和停止。没有例外,但事件查看器没有刷新任何数量的事件日志。 Fran71的建议对我有用:我关闭了事件查看器并重新打开。 Voilà,新创建的应用程序日志文件出现了。

答案 1 :(得分:1)

FWIW,我在Win8中遇到了这个问题,发现刷新事件查看器并没有导致我新创建的事件日志显示,但是关闭并重新打开事件查看器。因为在创建事件源或编写日志条目时没有抛出异常,所以让我疯了。

答案 2 :(得分:0)

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

此外,你仍然可以调试一个服务 - 把一个thread.Sleep(最多20秒)作为你的第一行(给自己时间来附加调试器),然后在该行之后加上一个断点。然后去工具 - >附加到处理并选择您的.exe。如果你在Thread.Sleep()结束之前完成了那么你就应该破解。

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

为了使调试更容易,请考虑将您的功能转移到DLL,然后让您的服务保持足够的代码来调用您的DLL - 这将简化单元测试和调试 - 但不要忘记很多事情都会改变当你真正将它作为一项服务运行时。