Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/28: Рейтинг темы: голосов - 28, средняя оценка - 4.71
12 / 12 / 0
Регистрация: 23.03.2009
Сообщений: 107
1

Windows Service. Timer не срабатывает

15.08.2012, 07:40. Просмотров 5618. Ответов 10
Метки нет (Все метки)


День добрый. Извините, если не в тот раздел пишу...

Проблема в следующем:
Решил написать простенькую службу в VS 2010 (До этого писал в Delphi), которая подключается к VPN и складывает ip на удалённый комп в txt, также она периодически повторяет процедуру, ибо частенько происходят обрывы.
В службе не запускается Timer. Если писать Windows Forms Application, то всё работает, а в службе таймер не срабатывает.

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
40
41
42
43
44
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.ServiceProcess;
using System.Text;
 
namespace VpnConnectorService
{
    public partial class VpnConnector : ServiceBase
    {
        public VpnConnector()
        {
            InitializeComponent();
        }
 
        protected override void OnStart(string[] args)
        {
            Process.Start("cmd", @"/k rasdial xxx yyy zzz /Domain:AA & exit"); //подключение VPN-соединения
            System.Threading.Thread.Sleep(15000); //задержка            
            String host = Dns.GetHostName();     //получение имени компьютера
            IPAddress ip = Dns.GetHostByName(host).AddressList[0];    //получение ip-адреса компьютера
            System.IO.File.WriteAllText(@"\\xxx\C$\Users\yyy\Desktop\IP-Home.txt", ip.ToString()); //создание/перезапись файла с ip-адресом
            timer1.Enabled = true;
        }
 
        protected override void OnStop()
        {
            timer1.Enabled = false;
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            Process.Start("cmd", @"/k rasdial xxx yyy zzz /Domain:AA & exit"); //подключение VPN-соединения
            System.Threading.Thread.Sleep(15000); //задержка
            String host = Dns.GetHostName();     //получение имени компьютера
            IPAddress ip = Dns.GetHostByName(host).AddressList[0];    //получение ip-адреса компьютера
            System.IO.File.AppendAllText(@"\\xxx\C$\Users\yyy\Desktop\IP-Home.txt", ip.ToString()); //создание/дополнение файла с ip-адресом
        }
    }
}
Заранее благодарю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2012, 07:40
Ответы с готовыми решениями:

не срабатывает Timer Callback, и не выполняются события
Добрый день! Решил написать схему переключения светофора, основанную на событиях. Заодно опробовал...

Windows Service C#
Господа помогите.....мозг взорван курсовую завтра сдавать....Пытаюсь написать Windows Service на C#...

Многопоточность в Windows Service
Добрый день. Дали задание переписать простую Windows Form в Windows Service. Windows Form была...

Сервер на Windows service
Мне нужно сделать сервер как службу windows,т.е. сделать его как проект windows service..может кто...

10
748 / 547 / 48
Регистрация: 17.06.2010
Сообщений: 1,039
Записей в блоге: 1
15.08.2012, 08:24 2
По-моему Enabled не достаточно.
C#
1
timer1.Start();
0
12 / 12 / 0
Регистрация: 23.03.2009
Сообщений: 107
15.08.2012, 10:03  [ТС] 3
Цитата Сообщение от gitarillo Посмотреть сообщение
По-моему Enabled не достаточно.
C#
1
timer1.Start();
Сделал так:
C#
1
2
3
4
5
6
7
8
9
10
protected override void OnStart(string[] args)
        {
            Process.Start("cmd", @"/k rasdial xxx yyy zzz /Domain:AA & exit"); //подключение VPN-соединения
            System.Threading.Thread.Sleep(15000); //задержка            
            String host = Dns.GetHostName();     //получение имени компьютера
            IPAddress ip = Dns.GetHostByName(host).AddressList[0];    //получение ip-адреса компьютера
            System.IO.File.WriteAllText(@"\\xxx\C$\Users\yyy\Desktop\IP-Home.txt", ip.ToString()); //создание/перезапись файла с ip-адресом
            timer1.Enabled = true;
            timer1.Start();
        }
Увы, но ничего не изменилось. В конечный файл складывается ip только 1 раз, как и раньше.
0
41 / 41 / 4
Регистрация: 18.11.2011
Сообщений: 112
15.08.2012, 10:06 4
Вы забыли указать таймеру интервал срабатывания события tick :
C#
1
timer1.Interval = 1000;
C#
1
2
3
4
5
6
7
8
9
10
11
protected override void OnStart(string[] args)
        {
            Process.Start("cmd", @"/k rasdial xxx yyy zzz /Domain:AA & exit"); //подключение VPN-соединения
            System.Threading.Thread.Sleep(15000); //задержка            
            String host = Dns.GetHostName();     //получение имени компьютера
            IPAddress ip = Dns.GetHostByName(host).AddressList[0];    //получение ip-адреса компьютера
            System.IO.File.WriteAllText(@"\\xxx\C$\Users\yyy\Desktop\IP-Home.txt", ip.ToString()); //создание/перезапись файла с ip-адресом
            timer1.Enabled = true;
            timer1.Intrerval = 1000;
            timer1.Start();
}
0
12 / 12 / 0
Регистрация: 23.03.2009
Сообщений: 107
15.08.2012, 10:19  [ТС] 5
Цитата Сообщение от Joke+R Посмотреть сообщение
Вы забыли указать таймеру интервал срабатывания события tick...
Я думал, что он автоматически выставляется в свойствах компонента, кстати, я там указал 10000 изначально, но не суть...
Сделал, как вы подсказали. Увы, но ничего не изменилось. По-прежнему то, что в таймере не срабатывает.

Кстати, совсем забыл. ОС, на которой пишу и тестирую: Windows 7 32-bit, но планируется, что будет использоваться на Windows 7 64-bit.
0
748 / 547 / 48
Регистрация: 17.06.2010
Сообщений: 1,039
Записей в блоге: 1
15.08.2012, 10:24 6
А то что у тебя задержка в тике таймера, ничего? задержка 15 секунд. у тебя она никогда не пройдет. ибо получается следующее
вызывается первый тик таймера
далее в нем врубается задержка 15 сек.
но интервал таймера 10 сек снова запускается и опять задержка на 15 сек
0
12 / 12 / 0
Регистрация: 23.03.2009
Сообщений: 107
15.08.2012, 10:27  [ТС] 7
Цитата Сообщение от gitarillo Посмотреть сообщение
А то что у тебя задержка в тике таймера, ничего. задержка 15 секунд. у тебя она никогда не пройдет. ибо получается следующее
вызывается первый тик таймера
далее в нем врубается задержка 15 сек.
но интервал таймера 10 сек снова запускается и опять задержка на 15 сек
Дело в том, что в оригинальном проекте у меня задержка в тике таймера 2 минуты, поэтому 15 секунд допустимы. В тике таймера 10 секунд я выставил лишь сейчас для тестирования, а в описании таймера первые 2 строки сейчас закомментированы.
0
748 / 547 / 48
Регистрация: 17.06.2010
Сообщений: 1,039
Записей в блоге: 1
15.08.2012, 10:31 8
тогда советую поставить останов на какой-либо строке в процедуре тика и протестить в пошаговом режиме.
0
12 / 12 / 0
Регистрация: 23.03.2009
Сообщений: 107
15.08.2012, 10:51  [ТС] 9
Цитата Сообщение от gitarillo Посмотреть сообщение
тогда советую поставить останов на какой-либо строке в процедуре тика и протестить в пошаговом режиме.
Ээх... А вот дебажить-то я никогда и не пробовал...
0
1089 / 587 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
01.10.2014, 06:01 10
удалось решить проблему?
сегодня столкнулся с тем же

p.s.
впрочем решение тут http://support.microsoft.com/kb/820639/ru
0
1054 / 861 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
01.10.2014, 10:44 11
Патриарх, если по-русски сказать, то следует использовать таймер из пространства имен Threading и не использовать таймер, предназначенный для WinFowms
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2014, 10:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Service для Windows
Доброго времени суток всем! У меня такой вопросик, вот решил написать для себя сервис для винды...

Windows service + WiX
Здравствуйте. Я создал проект Windows service с таким кодом: public partial class Service1 :...

A Windows service with the name MySQL already exists. Please uninstall this service correctly or choose a different name for the new service.
Не знаю что делать дальше

Java ee timer service, already running task
Всем привет! @Resource private TimerService timerService; timer =...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.