我正在尝试遵循此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.");
}
}
}
答案 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 - 这将简化单元测试和调试 - 但不要忘记很多事情都会改变当你真正将它作为一项服务运行时。