Не могу понять, как добавить логирование в мой сервис Windows! - PullRequest
1 голос
/ 19 сентября 2010

Я баловался этим весь день и до сих пор не нашел решения.Я создал службу Windows, которая должна регистрироваться в каталоге установки (Program Files/Service/LOGS/)

Но когда я запускаю свой сервис, он не делает того, чего я ожидал, и не регистрируетanythying.У меня чертовски много времени выясняется, в чем проблема, без какого-либо ведения журнала.Ниже приведен класс, который я использую для регистрации, кто-нибудь может увидеть, что я делаю неправильно?Я даже пытался дать «Все» все разрешения для папки LOGS, чтобы увидеть, если это проблема (но не повезло).

public class Logging
{
    public static void Log(string message)
    {

        string logFile = "LOGS/" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
        if (!Directory.Exists("LOGS"))
        {
            Directory.CreateDirectory("LOGS");
        }

        File.AppendAllText(logFile, message);

    }
}

Служба успешно запускается, и в моем средстве просмотра событий Windows нет ошибок...

ОБНОВЛЕНИЕ:

Я изменил свой путь к журналу на следующий, и мне все еще не повезло:

string logFile = @"F:\LOGS\" + DateTime.Now.ToString("yyyyMMdd") + ".txt";

Ответы [ 3 ]

4 голосов
/ 19 сентября 2010

Ну, во-первых, вы не должны ничего записывать в папку в каталоге Program Files.Это плохо и не сработает в Vista, Windows 7 или Windows Server 2008 и более поздних версиях.

Во-вторых, ваш код фактически не указывает, что вы о нем думаете.«Текущий каталог» службы не является каталогом программных файлов.Вероятно, это что-то вроде домашнего каталога пользователя, в котором он работает, или Windows \ system32.Опять же, приложение не должно иметь разрешения на запись.Вместо этого вы должны войти в систему, например, в поддиректории Program Data.

1 голос
/ 19 сентября 2010

Итак, теперь вы пишете в F: \ LOGS \, но:

  • Какой аккаунт вы используете для запуска своего сервиса? Эта учетная запись может писать в F: \ LOGS \?
  • Кроме того, вы настроили эту папку так, чтобы «Все» имели «Полный контроль» над ней?
1 голос
/ 19 сентября 2010

Вы пытались вызвать Directory.GetCurrentDirectory и записать имя текущего каталога в файл (используя абсолютный путь с разрешениями, настроенными так, чтобы «Все» имели «Полный контроль» целевой папки). Таким образом, вы можете узнать, пишет ли он, где, по вашему мнению, следует писать.

Также важно: когда ваша служба работает, какую учетную запись она использует для запуска? Если учетная запись, используемая для запуска службы, не имеет прав для записи в Program Files / Service / LOGS /, это может быть причиной того, что вы не видите ничего написанного там.

И, конечно, вы также можете использовать запись в журнал событий вместо записи в файловую систему (http://support.microsoft.com/kb/307024). ИМО, это рекомендуемый способ делать подобные вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...