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

C# Windows服务输出未显示在事件日志中,c#,windows,windows-services,event-log,windows-7-x64,C#,Windows,Windows Services,Event Log,Windows 7 X64,我正试着遵循这一点 我正在使用Visual Studio 2010 Premium 我在服务器资源管理器或事件查看器中看到的唯一事件是“服务已成功启动”和“服务已成功停止” 以下是服务代码: namespace MyNewService { public partial class MyNewService : ServiceBase { public MyNewService() { InitializeComponent

我正试着遵循这一点

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

可能是权限问题。正如评论员所说,试着以管理员的身份运行VStudio或编译后的服务

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

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


<>为了便于调试,考虑将您的功能移动到一个DLL,然后将您的服务保留到足够的代码来调用您的DLL——这将简化单元测试和调试-但是不要忘记,当您作为服务运行它时,很多事情会发生改变。我在Win8中遇到了这个问题,发现刷新事件查看器不会导致我新创建的事件日志显示,但关闭并重新打开事件查看器会显示。创建事件源或编写日志条目时没有引发异常,这让我发疯。

我在Win 7 64上遇到了与Visual Studio 2010 Professional相同的问题。我新编译的服务是在InstallUtil.exe以管理员身份运行的情况下安装的。它正确启动和停止。没有异常,但没有刷新事件查看器的次数会显示新的事件日志。Fran71的建议对我起了作用:我关闭了事件查看器,然后重新打开。瞧,新创建的应用程序日志文件出现了。

您看到自己的事件日志出现了吗,还是正在查看应用程序日志?以管理员身份运行您的开发环境(右键单击,以管理员身份运行…)这可能是权限问题。我以管理员身份启动了VS,并获得了输出。根据:在安装应用程序期间创建新事件源,创建事件源时未引发任何异常。这允许操作系统有时间刷新其已注册事件源列表及其配置。如果操作系统尚未刷新其事件源列表,并且您尝试使用新源写入事件,则写入操作将失败。因此,创建事件源至少是异步的。这是有道理的,但是写操作是成功的,在重新打开查看器后,我以前在测试时写的所有日志都显示在正确的位置。只是有点困惑。天哪,谢谢。我可以在应用程序日志中看到我的服务正在启动,但直到我重新启动事件查看器,我的应用程序日志才显示出来。我今天进行的数百项测试中的每一项都在这里欢迎来到堆栈溢出!请仅对实际答案使用“发布答案”按钮。在这个网站上投入一些时间,你会得到足够多的你喜欢的答案,这是表示感谢的堆栈溢出方式。感谢FumblesWithCode(或Fran71,尽管在这里找不到他)。关闭和重新打开它对我也很有效。“Fran71”似乎等于“Jordan”,而不是
线程。Sleep
技巧,你可以调用它,它将中断并等待附加调试器