所以我有一个C#windows服务,在某些没有互联网访问权限的系统上无法启动。它尝试启动,但在服务启动之前超时。我无法在任何开发环境中重现该问题,但在其他系统(通常是w2k3)上已经多次看到它。
当我将我的服务置于调试模式时,我要做的第一件事是在本地PC上创建一个日志文件,但是这个文件永远不会被创建,所以我相信OnStart代码永远不会被调用。
在其中一个系统上,我们看到了一个事件日志条目,该条目引导我们阅读这篇知识库文章:http://support.microsoft.com/kb/317541
因此,通过停止根证书更新服务或将设备连接到互联网来关注本文,我们的服务现在将启动。另一个有趣的事情是我们有3个服务都以几乎相同的代码开始,但它始终是3个未能启动的特定之一。这是我们的OnStart方法代码:
if (args.Length > 0)
{
if (args[0].ToLower().Equals("debug"))
{
string AppLog = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
string locallogpath = Settings.Settings.ServiceLogFileLocation.ToString();
if (!Directory.Exists(locallogpath))
{
Directory.CreateDirectory(locallogpath);
}
LogFileName = Path.Combine(locallogpath, AppLog + ".htm");
try
{
_logFile = new StreamWriter(new FileStream(LogFileName, System.IO.FileMode.Create));
_logFile.WriteLine(htmlHeader + "<span class=lognormal>Service Started!</span><br>");
_logFile.Close();
}
catch { }
IsDebug = true;
}
}
我的问题是,如果没有可用的互联网连接,我们可能会做什么会导致根证书更新失败?
答案 0 :(得分:1)
运行此服务是否涉及任何证书签名程序集?这些可能会在验证签名时触发一系列事件,这很可能导致Windows需要检查根证书的状态。
我的猜测是,如果您需要在未连接的服务器上运行受影响的服务,您唯一的选择是保持根证书更新服务停止。
我猜你的日志代码与它无关。