Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите написать службу  (Прочитано 10311 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Y3YPnATOP
Гость
« : 16-11-2004 14:39 » new

Хелп, помогите написать службу, которая раз в сутки будет запускать .exe шник
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 16-11-2004 15:28 » 

Вопрос поставлен некорректно. С какими ты столкнулся сложностями, и чего тебе нужно объяснить?

Для запуска exe раз в сутки службы не нужно, достаточно создать задание Windows (Control Panel/Sheduled Task). Можно это и через консоль сделать. Следует лишь определиться, под какой учётной записью запускать exe.

Служба в этом случае оправдана лишь тогда, когда тебе нужно выполнять какие-нибудь дополнительные действия, писать в системный лог.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Y3YPnATOP
Гость
« Ответ #2 : 16-11-2004 18:02 » 

Хроршо, поставим вопрос по другому:
Я хотел бы научиться писать службы, т.к. никогда этого не делал!
Если не трудно пускай кто-нить набросает примерчик, или укажет, где об этом можно доходчиво прочитать!
Записан
Mouse
Молодой специалист

ru
Offline Offline

« Ответ #3 : 17-11-2004 09:08 » 

Мне понравилась книга "Разработка Web-сервисов XML и серверных компонентов на Microsoft Visual Basic .NET и Microsoft Visual C# .NET. Учебный курс." Подробнее о ней на сайте издательства: http://www.rusedit.ru/view_book_sheet.asp?IDX=4&FIRST=1
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 17-11-2004 11:20 » 

В .NET создать службу очень просто. Создать проект WindowsService. В результате сгенерируется проект, содержащий 2 класса: Service и ServiceInstaller. Первый класс реализует функционал службы, второй отвечает за её регистрацию в системе и удаление.

Пример класса ServiceInstaller (из одного моего проекта)
Код:
using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;

namespace MyNamespace
{
    /// <summary>
    /// Summary description for NotificationServiceInstaller.
    /// </summary>
    [RunInstaller(true)]
    public class MyServiceInstaller : System.Configuration.Install.Installer
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;
        public ServiceInstaller si;
        public ServiceProcessInstaller spi;

        public MyServiceInstaller()
        {
            // This call is required by the Designer.
            InitializeComponent();

            // TODO: Add any initialization after the InitComponent call
            si = new ServiceInstaller();
            spi = new ServiceProcessInstaller();
            spi.Account = ServiceAccount.LocalSystem;
            spi.Username = null;
            spi.Password = null;
            si.DisplayName = "Это имя увидишь в списке служб";
            si.ServiceName = "MyService";
            si.StartType = ServiceStartMode.Manual;
            Installers.Add(si);
            Installers.Add(spi);
        }

        #region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion

} // class NotificationServiceInstaller
} // namespace Amcor.ErrandsControl.NS
В конструкторе описываются: учётная запись для запуска службы, названия и режим запуска (ручной, автоматический, отключено). Этого достаточно.

Класс самого сервиса тоже прост. Наследуется от System.ServiceProcess.ServiceBase. Там пиши всё что хочешь (то, чего должна делать служба). У базового класса есть ряд методов, которые нужно переопределить.

protected override void OnStart(string[] args)
protected override void OnPause()
protected override void OnContinue()
protected override void OnStop()

Которые вызываются при запуске, остановке, возобновлении и выключении службы.

Вообще, wizard сам создаст все нужные методы.

Для решения твоей задачи нужно в классе поставить таймер и написать обработчик таймера, где бы вызывалась твой exe.

Конфигурация для .NET служб стандартна для .NET - хранится в XML-файле с расширением config, лежащем там же, где и полученная dll службы. В нём ты можешь хранить путь к своему exe, а можешь вообще ничего не хранить.

Для регистрации/удаления сервиса в системе в .NET Framework можно воспользоваться утилитой InstallUtil.exe.
« Последнее редактирование: 02-12-2007 18:08 от Алексей1153++ » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines