在将您的进程或可执行文件作为服务运行时,有没有需要注意的事项?例如,如何进行无声日志记录和处理关键错误报告场景等方面?您是如何处理这些问题的?
在将您的进程或可执行文件作为服务运行时,有没有需要注意的事项?例如,如何进行无声日志记录和处理关键错误报告场景等方面?您是如何处理这些问题的?
针对严重错误报告,你只能使用标准的服务设置(通过已安装服务的属性)或自己动手做些什么。这可以是一个简单的日志文件,记录意外错误(通过使用AppDomain.UnhandledException来捕获和记录它们),使用Windows事件日志记录类似的信息,或者让另一个进程监视服务的错误(即服务停止)并警报某个人。
微软有一篇文章,名为“Windows服务应用程序介绍”,是关于在.Net中制作服务的很好的概述。
从我的经验中了解到开发Windows服务的其他事情:
OnStart
方法启动一个新线程运行服务,然后返回。我有一个好方法,在你的OnStart方法或更好的是在Main方法之前添加以下代码。
#if DEBUG
//LogMessage("Service starting");
#warning The service has been set to break on debug. Only used for debugging.
//LogMessage("DEBUG MODE - If the service crashed after this then your problem is that you're running in DEBUG mode without a Visual Studio installed.");
if (Debugger.IsAttached == false) Debugger.Launch();
#endif
基本上,重要的部分是 Debugger.Launch()
,它会在启动服务时弹出一个窗口,询问您是否想要调试服务以及使用哪个Visual Studio进行调试。这使得与服务一起工作变得更加方便和出色。我把#warning
放在那里只是为了让它显示在警告列表中,以提醒我它的存在,尽管#if DEBUG
应该可以防止大多数问题。
只需记住不要在部署时运行此代码(即不要发布调试代码),因为如果机器上没有安装Visual Studio,它会崩溃。
不要显示任何消息框/对话框。
请注意,您的应用程序通常不会在与登录用户相同的帐户下运行。因此,如果用户能够访问某个文件/目录,这并不意味着服务也可以这样做。
确认您拥有某种警报系统,以便在服务崩溃时通知您,例如向自己或某个邮箱发送电子邮件。