• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Service

  • Автор темы f.7
  • Дата начала
F

f.7

Подскажите как сделать так, чтобы программа зыпускалась как служба????
 
D

Dottik

Вот две статьи, думаю помогоут.
 

Вложения

  • service.rar
    9,4 КБ · Просмотры: 247
F

f.7

Вот чтобы не создавать новой темы решил написать тута..... Научился я запускать службы и остановливать, но вот второй день уже не могу решить одну прблему... Мне служба необходима для того чтобы она писала лог, ну тоесть чтобы одна функция вызывалась через определённый отрезок времени, пробовал я это повесить на TIMER, но почемуто он не работает в WindowsService, потом на одном форуме я нашел вот такое решение:
protected override void OnStart(string[] args)
{
ServiceThread();
}
........
private static void ServiceThread()
{
int time_to_sleep = 100000;
while (true)
{
//А вот тут вызываем нужную фенкцию
System.Threading.Thread.Sleep(time_to_sleep);
}
}
но это решение не хорошое, т.к. останавливается работа всей службы...

Вот я и хотел бы узнать как же мне вызывать в сервисе функцию через допустим минуту..????
Буду очень признателен тем, кто откликнеться и не оставит меня в беде..........
 
K

karlito

Для: f.7
Есть целых три Timer-а в FCL. Какой из них ты используешь? как и когда ты его регистрируешь?
Для твоей ситуации лучше всего System.Threading.Timer.
 
F

f.7

Для karlito
Спасиба за совет, решение я уже нашел, таймер использую System.Timers.Timer, правда сейчас этот код на работе, а у меня сейчас сессия, но если каму нада вы напишите я с удовольствием выложу когда закончиться сессия......
 
I

iosif88

Для karlito
Спасиба за совет, решение я уже нашел, таймер использую System.Timers.Timer, правда сейчас этот код на работе, а у меня сейчас сессия, но если каму нада вы напишите я с удовольствием выложу когда закончиться сессия......

Необходимо решение этой проблемы.

Вообщем имеется windows service и он должен переодически(скажем каждые 10 сек) вызывать определенуую функцию (например записать в лог сообщение) . Как это сделать?
 
I

iosif88

Необходимо решение этой проблемы.

Вообщем имеется windows service и он должен переодически(скажем каждые 10 сек) вызывать определенуую функцию (например записать в лог сообщение) . Как это сделать?

Если кому понадобиться вот решение:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
System.Windows.Forms.Timer timer1;
Form form1;
Thread messageThread;

public Service1()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
messageThread = new Thread(new ThreadStart(ThreadProc));
messageThread.Start();
messageThread.IsBackground = true;
}

void ThreadProc()
{
form1 = new Form();
timer1 = new System.Windows.Forms.Timer();
timer1.Tick += new EventHandler(timer_Tick);
timer1.Interval = 10000; //задаем нужный нам интервал в мс
timer1.Start();
form1.Show();

Application.Run(form1);
}
void timer_Tick(object sender, EventArgs e)
{
//Эта функция будет вызываться переодически через заданное количество мс указанных в timer1.Interval
//Здесь и реализуем нужную нам функциональность
}
}
}
 
I

iosif88

И зачем нужны окна в сервисе?

Окна видно не будет. А нужно оно для таймера.
Если подскажете как реализовать таймер без окна было бы здорово. ))
System.Timers.Timer срабатывает всего один раз. А нужно чтоб функция вызывалась переодически.
 
V

vital

Окна видно не будет. А нужно оно для таймера.
класс System.Threading.Timer, например
срабатывает всего один раз. А нужно чтоб функция вызывалась переодически.
А код вы проверили? Настроили правильно?=)<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">вот пример</div></div><div class="sp-body"><div class="sp-content">
C++:
using System;
//Включаем необходимое пространство имен.
using System.Timers;
public class MyTimer
{
static int n=0; //Счетчик.
public static void Main()
{
System.Timers.Timer tmr = new System.Timers.Timer();
tmr.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
tmr.Interval=1000; //Устанавливаем интервал в 1 сек.
tmr.Enabled=true; //Вкючаем таймер.
while(n!=4); //Таймер тикает 4 раза.
}
//Метод для отработки события Elapsed таймера.
public static void OnTimedEvent(object source, ElapsedEventArgs e)
{
//Делаем некоторые действия.
Console.WriteLine("Hello World!");
//Увеличиваем счетчик.
n++;
}
}
Не рекомендует Рихтер этот класс использовать. Старый он..
 
I

iosif88

класс System.Threading.Timer, например

А код вы проверили? Настроили правильно?=)<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">вот пример</div></div><div class="sp-body"><div class="sp-content">
C++:
using System;
//Включаем необходимое пространство имен.
using System.Timers;
public class MyTimer
{
static int n=0; //Счетчик.
public static void Main()
{
System.Timers.Timer tmr = new System.Timers.Timer();
tmr.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
tmr.Interval=1000; //Устанавливаем интервал в 1 сек.
tmr.Enabled=true; //Вкючаем таймер.
while(n!=4); //Таймер тикает 4 раза.
}
//Метод для отработки события Elapsed таймера.
public static void OnTimedEvent(object source, ElapsedEventArgs e)
{
//Делаем некоторые действия.
Console.WriteLine("Hello World!");
//Увеличиваем счетчик.
n++;
}
}
Не рекомендует Рихтер этот класс использовать. Старый он..

На счет класса описка. Именно System.Threading.Timer я и имел ввиду. Реализация была почти такая же что привели вы. Но мне нужно чтоб
1)он срабатывал неограниченное число раз.
2) Как реализовать это в службе?
 
V

vital

1. В примере выше - что мешает просто запустить цикл который прервется только если какая-то переменная станет TRUE?
2. От того, что у вас служба - класс не изменится, поверьте=) Точно так же)
 
I

iosif88

1. В примере выше - что мешает просто запустить цикл который прервется только если какая-то переменная станет TRUE?
2. От того, что у вас служба - класс не изменится, поверьте=) Точно так же)

1. Мешает 100 % загрузка процессора
2. Куда передается управление в службе после завершения метода OnStart ? Хотя я щас проверю ))
 
I

iosif88

У вас ведь таймер в цикле=> будет задержка. Не будет такого.

Я так понимаю вы предлагаете следующее ?

using System;
//Включаем необходимое пространство имен.
using System.Timers;
public class MyTimer
{
static int n=0; //Счетчик.
public static void Main()
{
System.Timers.Timer tmr = new System.Timers.Timer();
tmr.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
tmr.Interval=1000; //Устанавливаем интервал в 1 сек.
tmr.Enabled=true; //Вкючаем таймер.
while(True); //Таймер тикает 4 раза.
}
//Метод для отработки события Elapsed таймера.
public static void OnTimedEvent(object source, ElapsedEventArgs e)
{
//Делаем некоторые действия.
Console.WriteLine("Hello World!");
//Увеличиваем счетчик.
n++;
}
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!