Кажется, что мой CustomXmlWriterTraceListener ведет себя по-разному при запуске со службой, чем библиотека классов или exe.
Я добавил это к своему сервису, чтобы отладить основную точку входа и пройти инициализацию моего слушателя:
Debugger.Launch();
Основной Writer равен нулю, когда я запускаю свой сервис, обычнозаселено во время базового конструктора.Я использовал .NET Reflector, чтобы увидеть, что делает XmlWriterTraceListener.Есть внутренний метод EnsureWriter ().Этот метод должен создать Writer.Я клонировал метод Microsoft и добавил его в свой Слушатель, и все вроде бы нормально.Мой слушатель подходит для услуги.
internal bool EnsureWriter()
{
bool flag = true;
if (Writer == null)
{
flag = false;
if (baseFileName == null)
{
return flag;
}
Encoding encodingWithFallback = new UTF8Encoding(false);
string fullPath = Path.GetFullPath(baseFileName);
string directoryName = Path.GetDirectoryName(fullPath);
string fileName = Path.GetFileName(fullPath);
for (int i = 0; i < 2; i++)
{
try
{
Writer = new StreamWriter(fullPath, true, encodingWithFallback, 0x1000);
flag = true;
break;
}
catch (IOException)
{
fileName = Guid.NewGuid().ToString() + fileName;
fullPath = Path.Combine(directoryName, fileName);
}
catch (UnauthorizedAccessException)
{
break;
}
catch (Exception)
{
break;
}
}
if (!flag)
{
baseFileName = null;
}
}
return flag;
}