Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/23: Рейтинг темы: голосов - 23, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 18.01.2007
Сообщений: 9

WindowsService для ведения логов

18.01.2007, 15:40. Показов 4400. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день..
у меня вот такая проблема я написал сервис который должен писать лог через домустим минуту. вот текст программы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
private void timer1_Tick(object sender, EventArgs e)
{
fAddErorTextInLog();
}
public static void fAddErorTextInLog()
{
if (!File.Exists(@"C:ThisError.log"))
{
File.Create(@"C:ThisError.log");
}
StreamWriter ST = new StreamWriter(@"C:ThisError.log", true);
ST.WriteLine(DateTime.Now);
ST.Close();
}
}
}
так вот когда я в VS2005 пошагово запускаю всё нормально работает-пишется лог, а когда уже инсталирую как сервис и запускаю то таймер наотрез отказывается работать и лог не пишеться.....
Помогите кто может, я уже не могу решить эту проблему 3 дня, облазил много форумов но
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.01.2007, 15:40
Ответы с готовыми решениями:

WCF + WindowsService
В общем есть задача написать небольшой проект, к которому в дальнейшем будет обращаться два-три других web-приложения. Явно напрашивается...

Автономное воспроизведение видео в WindowsService
Встала необходимость в автономном воспроизведении Видео. Задумка такова: Считывание информации из XML, и воспроизведение по времени. Все...

Клиент-сервер для ведения баз данных
Необходимо написать клиент-серверное приложение. Сервер принимает запросы и выдает информацию из баз. Как организовывать такое приложения?...

5
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
18.01.2007, 16:32
Скорее всего дело в том что надо запускать таймер в методе OnStart (timer1.Enabled = true). Соответственно надо не забыть выключить при остановке сервиса.
Кроме того нет никакой необходимости в проверке существования файла и его создания. Конструктор класс StreamReader сделает это за тебя. Также оберни использование StreamReader в блок using чтобы файл не остался открытым. Метод fAddErorTextInLog тогда будет выглядеть так:
C#
1
2
3
4
5
6
7
private static void fAddErorTextInLog()
{
    using (StreamWriter ST = new StreamWriter(@"C:ThisError.log", true))
    {
        ST.WriteLine(DateTime.Now);
    }
}
Обрати внимание на модификатор private. Сомневаюсь что ты будешь вызывать этот метод из других классов, а значит делать его public нет никакого смысла.
И еще небольшая придирка От буквы f в начале имени функции нет никакого смысла. То что это функция видно и без нее.
0
0 / 0 / 0
Регистрация: 18.01.2007
Сообщений: 9
18.01.2007, 17:02  [ТС]
Уважаемый bazile спасибо за оперативный ответ!!!
я сделал всё как ты и сказал:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
timer1.Enabled = true;
}
protected override void OnStop()
{
timer1.Enabled = false;
}
private void timer1_Tick(object sender, EventArgs e)
{
fAddErorTextInLog();
}
private static void fAddErorTextInLog()
{
using (StreamWriter ST = new StreamWriter(@"C:ThisError.log", true)) 
{
ST.WriteLine(DateTime.Now);
}
}
}
}
Но проблема не исчезла, не хочет таймер работать ну хоть убей.. Всё осталось по прежнему... Может есть ещё какие варианты, если есть подскажи пожалуйста...
P.S. а f в начале названия функции я всегда ставлю в собственоручно написаных функциях, это мне необходимо для того чтобы я мог быстро отыскать именно мои функции(имеется ввиду когда вызываю подсказку )
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
18.01.2007, 19:11
У меня установлена Visual Studio 2005 Std Edition, а там нет возможности писать windows сервисы и я могу только гадать
Если у тебя в дизайнере таймер включен по умолчанию, то попробуй его выключить и проверить поможет или нет.
Если нет, то добавь к метод OnStart такой код:
C#
1
2
3
4
5
6
timer1.Enabled = true;
using (StreamWriter ST = new StreamWriter(@"C:ThisError.log", true))
{
    ST.WriteLine(DateTime.Now);
    ST.WriteLine(timer1.Enabled);
}
Это позволит убедиться что метод OnStart реально вызывается и покажет состояние таймера.
И еще одна идея возникла. Ты похоже используешь таймер типа System.Windows.Forms.Timer, который не предназначен для сервисов. Попробуй вместо него класс System.Timers.Timer. Код тогда будет выглядеть так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        private System.Timers.Timer _logTimer;
        ...
        protected override void OnStart(string[] args)
        {
            if (null == _logTimer)
            {
                _logTimer = new System.Timers.Timer(60*1000); // 1 минута
                _logTimer.Elapsed += OnLogTimerElapsed;
            }
            _logTimer.Start();
        }
        protected override void OnStop()
        {
            if (null != _logTimer)
            {
                _logTimer.Stop();
            }
        }
        private void OnLogTimerElapsed(object source, ElapsedEventArgs e)
        {
            fAddErorTextInLog();
        }
        ...
}
0
0 / 0 / 0
Регистрация: 18.01.2007
Сообщений: 9
18.01.2007, 21:30  [ТС]
спасибо за то что помог, на самом деле помащь была существенная, ты оказался прав что я не тот таймер исползовал, но правда твой пример я тож не смог запустить и прибегнув к помощи товарищей поопытнее всё заработало, если кому надо код приведен ниже(это точно работающий как надо сервис):
суть его в том что он создает на диске С файл ThisError.log и записывает туда каждые 10 секунд системное время
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.ServiceProcess;
using System.IO;
using System.Threading;
namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        Timer myTimer;
        AutoResetEvent autoEvent;
        TimerCallback timerHandler;
        public Service1()
        {
            InitializeComponent();
            autoEvent = new AutoResetEvent(false);
            timerHandler = new TimerCallback(myTimer_tick);
        }
        protected override void OnStart(string[] args)
        {
            myTimer = new Timer(timerHandler, autoEvent, 1000, (10*1000));
        }
        protected override void OnStop()
        {
            myTimer.Dispose();
        }
        private void myTimer_tick(object state)
        {
            fAddErorTextInLog();
        }
        private static void fAddErorTextInLog()
        {
            using (StreamWriter ST = new StreamWriter(@"C:ThisError.log", true))
            {
                ST.WriteLine(DateTime.Now);
            }
        }
    }
}
0
0 / 0 / 0
Регистрация: 18.01.2007
Сообщений: 9
18.01.2007, 21:32  [ТС]
bazile выше написаная благадарность - это конечно в твой адрес!!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.01.2007, 21:32
Помогаю со студенческими работами здесь

Создание ПО для снятие логов с телефонной станции
Здравствуйте, такая ситуация у меня есть станции 3 штуки LG LDK-100. Мне нужно ежедневно снимать логи с ней о поступающих исходящих...

Консоль для ведения логов
Не уверен, что пишу туда, куда нужно, но есть только один способ узнать. Интересуют существующие решения по сабжу. Требования простые: ...

Возможно ли создание TextBox не на своём сайте поверх основного шаблона для дальнейшего ведения логов?
Mr_Sergo, или кто разбирающийся, подскажите пожалуйста, возможно ли создание что-то типа TextBox не на своём сайте просто поверх основного...

ПО для ведения списка контрагентов
Добрый день! Посоветуйте, плиз, программу для ведения списка контрагентов. Наименование, ИНН, адрес, телефон и т.п. С удобным и простым...

Программа для ведения склада
Подскажите фунции и как ими пользоваться для работы с DateGridView. Мне нужно в Form.DateGridView по нажатею button показывать данные из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru