我创建了一个 Windows 服务来在服务启动时发送邮件。当我调试服务并通过代码运行它时,该服务工作正常,就像它发送邮件一样。但是我安装后该服务无法正常工作。安装服务后它不发送任何邮件。
谁能建议我解决方案?
我创建了一个 Windows 服务来在服务启动时发送邮件。当我调试服务并通过代码运行它时,该服务工作正常,就像它发送邮件一样。但是我安装后该服务无法正常工作。安装服务后它不发送任何邮件。
谁能建议我解决方案?
该服务很有可能在作为服务帐户运行时缺乏执行一项或多项操作的权限。
检查 Windows 事件日志以获取任何相关的错误消息。作为测试,您可以将您的服务配置为以您登录时使用的同一用户身份运行(只是为了确保问题是基于权限的......不要让该配置处于活动状态,因为它是一个主要的安全漏洞)。
调试服务有点困难。在每个方法中使用try..catch
块将消息写入文件;例如
try
{
..
}
catch(Exception ex)
{
SaveMessage(ex.ToString());
}
保存消息的方法是:
static void SaveMessage(string s)
{
StreamWriter sw = new StreamWriter(@"C:\service_exceptions_file.txt", true);
sw.WriteLine(s);
sw.Close();
}
然后你会看到问题出在哪里。
您还可以通过上述方法在代码中添加一些消息,以查看代码的哪些部分正常工作
在您的Main()
方法中,只需在之前添加以下几行ServiceBase.Run(ServicesToRun);
:
#if DEBUG
while(!Debugger.IsAttached)
{
Thread.Sleep(1000);
}
#endif
然后安装您的服务并启动它。在它启动时,将调试器附加到服务的进程(调试菜单 => 附加到进程),您应该能够对其进行调试。
不要忘记在启动服务之前设置断点。