С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 21

Не получается запустить службу Windows

11.06.2015, 11:02. Показов 1654. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Создал приложение для мониторинга директорий в Windows. Затем переделал его в службу. При попытке запуска службы выходит ошибка 1053 (ошибка времени запуска). Гуглил похожие темы, пытался сделать, как там написано, но пока что ничего не выходит. Помогите разобраться. Вот кусок кода:
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
45
46
47
public partial class Service1 : ServiceBase
    {
      
       
        public Service1()
        {
            this.AutoLog = false;
            InitializeComponent();
        }
 
        static bool flag = true;
        static List<FileSystemWatcher> elements = new List<FileSystemWatcher>();
        static List<Thread> threads = new List<Thread>();
        static bool office_option = true;
        static bool work = true;
        protected override void OnStart(string[] args)
        {
            System.IO.File.Delete(@"C:\Audit\one.txt");
            File.Copy(@"C:\Audit\input.txt", @"C:\Audit\input2.txt");
            string[] lines = System.IO.File.ReadAllLines(@"C:\Audit\input2.txt");
            System.IO.File.Delete(@"C:\Audit\input2.txt");
            // System.IO.File.Delete(@"C:\Audit\input2.txt");
            List<string> directories = new List<string>();
            for (int i = 0; i < lines.Length; i++)
            { directories.Add(lines[i]); }
            for (int i = 0; i < lines.Length; i++)
            {
                directories.Add(lines[i]);
                Thread thread = new Thread(create_new_watcher);
                threads.Add(thread);
                (threads.Last()).Name = "Thread " + (threads.Count);
                (threads.Last()).Start(directories[i]);
            }
 
            FileSystemWatcher watcher = new FileSystemWatcher("C:/Audit");
            watcher.Filter = "*.txt";
            watcher.NotifyFilter = NotifyFilters.FileName;
            watcher.Created += new FileSystemEventHandler(tmp_search);
            watcher.EnableRaisingEvents = true;
 
            while (work) { Thread.Sleep(200); }
        }
 
        protected override void OnStop()
        {
            work = false;
        }
Далее идет описание других методов...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.06.2015, 11:02
Ответы с готовыми решениями:

Программно запустить службу
Здравствуйте. Товарища модератор, если вопрос не в эту ветку, переадресуйте. Подскажите, можно ли программно запустить службу без её...

Win CE 6 остановить запустить службу
Уважаемые программисты кто знает, подскажите пожалуйста, запутался совсем. Пытаюсь с VS2008 на C# остановить, запустить службу, перечитав...

Не получается остановить службу WindowService
Есть служба, много чего делает. и к базе конектится, и ком порты опрашивает, и тсп слушает . Дело такое - пробую перезапустить - а вдруг...

7
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
11.06.2015, 11:28
Zugmashine, делай Thread.Sleep на старте, ставь точку останова, атачься к процессу и дебаж на какой строке отваливается.
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 21
11.06.2015, 11:49  [ТС]
Если я правльно понял, эту строку while (work) { Thread.Sleep(200); } в конце надо удалить и сделать так:
C#
1
2
3
4
5
6
7
8
protected override void OnStart(string[] args)
        { 
             while(work) 
            { 
             Thread.Sleep(200); 
            <...Код метода...>
            } 
        }
В коде метода поставить точку останова в произвольном месте. Затем, при попытке запуска присоединяться к процессу службы и смотреть, в чем дело. Это вы имели ввиду?
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
11.06.2015, 12:08
Zugmashine, не нужно ничего ни от куда удалять. В самом начале метода OnStart поставь Sleep секунд на 10, чтобы успеть приатачиться к процессу, а на следующей строке кода поставь точку останова. Запускаешь дебаг. Нажимаешь Ctrl+Alt+P, выбираешь свой процесс и ждешь, пока Sleep вернёт управление потоку. Дальше построчно смотришь на какой строке падает служба.

Добавлено через 2 минуты
КСТАТИ! А зачем вообще этот while(work)!? work же изначально истина - это бесконечный цикл, вот и не запускается служба.
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.06.2015, 14:00
Лучший ответ Сообщение было отмечено Zugmashine как решение

Решение

Zugmashine, вместо вечного цикла, запихни тело твоей служьы в таймер (System.Timers.Timer) и будет тебе счастье.

BozKurt, делюсь хитростью, в начале кода ставится.
C#
1
2
bool flag = true;
while(flag) {}
После этого аттачишься с бряком на while, в Immediate пишешь flag = false; и выходишь. Намного удобнее слипа в начале - если у тебя со слипом быстрее аттачиться получается, то ждешь, пока слип отработает, если медленнее, то не успеваешь заатачиться и всё падает. А цикл работает ровно до того момента, пока не будет нужно.

Добавлено через 18 минут
C#
1
FileSystemWatcher watcher = new FileSystemWatcher("C:/Audit");
неправильный путь
2
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 21
11.06.2015, 14:58  [ТС]
Спасибо за ответы! У меня получилось, когда добавил таймер. Написал в конце метода on_start следующее:
C#
1
2
3
4
System.Timers.Timer aTimer = new System.Timers.Timer();
                aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
                aTimer.Interval = 5000;
                aTimer.Enabled = true;
Только теперь не знаю, как остановить службу. Раньше думал, что пока в бесконечном цикле переменная work= true, то служба работает. В методе on_stop ставил её значение на false. А сейчас, получается, надо остановить таймер из метода OnTimedEvent если эта булевая переменная = false. Как это сделать?
Добавлено через 18 минут
C#
1
FileSystemWatcher watcher = new FileSystemWatcher("C:/Audit");
неправильный путь Почему неправильный?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.06.2015, 15:01
Zugmashine,
C#
1
2
3
4
        protected override void OnStop()
        {
            timer.Stop();
        }
1
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 21
11.06.2015, 15:13  [ТС]
Хах, гениально у меня спеклись мозги)) Пойду, от компа отдохну..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2015, 15:13
Помогаю со студенческими работами здесь

Создать службу windows
Нужно реализовать службу Windows которая включалась бы при запуске компа и не давала закрыть процесс. а уж если всё таки и процесс закрылся...

Как зарегистрировать службу windows под пользователем SYSTEM?
Что-то не получается подскажите, как это сделать?

Как запустить службу веб-браузером?
есть asp.net applications using System; using System.Collections.Generic; using System.Linq; using System.Web; using...

Как создать Windows Service (службу), если его нету в VS?
Здравствуйте! Поставил себе VS Professional 2013. Хотел создать Windows Service, но его там просто нету. Если поискать во вкладке...

Не получается запустить программу
Всем привет! Возник очень странный вопрос. Это - работает private void button1_Click(object sender, EventArgs e) { ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru