Служба Windows не вызывает библиотеку классов - PullRequest
1 голос
/ 24 февраля 2012

У меня есть служба Windows, которая переопределяет методы OnStart и OnStop для вызова библиотеки классов.Я использую модель производителя / потребителя (см. http://www.albahari.com/threading/part4.aspx#_Wait_Pulse_Producer_Consumer_Queue, где я понял идею / логику).

У меня проблема в том, что по какой-то причине действие не выполняется правильно.Вот код «(System.) Action» (внутри timer_elapsed):

_queue.EnqueueItem(() =>
{
    BuildFile file = new BuildFile();
    file.run();

    _writer.WriteLine("Gets Here: {0}", DateTime.Now.ToString());
    _writer.Flush();
});

Как вы, вероятно, видите, _writer - это, по сути, инструмент ведения журнала «отладки».Он ДОЛЖЕН записывать эту строку в файл всякий раз, когда он вызывается (служба Windows запускает таймер):

_timer.Interval = 30000; //(3600000)
_timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
_timer.Enabled = true;

Для теста ОЧЕНЬ первый вызов, который выполняется для BuildFile, является простымвойти в базу данных:

public BuildFile()
{
   logEntry("Success", "I'm Running...");
}

, но запись в журнале никогда не записывается (метод отлично работает в других местах).

Самая странная часть - когда я оборачиваю класс с помощью консольного приложения,работает отлично.Код точно такой же в Windows Service, но он просто не запускает BuildFile.

Кто-нибудь видел что-нибудь подобное?

1 Ответ

1 голос
/ 28 февраля 2012

Консольное приложение и сервисное приложение, скорее всего, работают под разными учетными записями. Убедитесь, что учетная запись службы имеет доступ к пути файловой системы. Кроме того, если вы используете проверку подлинности Windows для базы данных, вам также необходимо это рассмотреть.

...