Застрял на реализации службы Windows - PullRequest
0 голосов
/ 20 августа 2010

Эй, ребята, я следил за некоторыми онлайн-уроками, касающимися создания и установки службы Windows, и, похоже, продолжаю ввязываться.Я следовал за уроком здесь , и пока он работает, это не 100%.Это код, который я использую:

namespace SuperService
{
partial class Logger : ServiceBase
{
    public Logger()
    {
        InitializeComponent();
    }

    void timer1_Tick( object sender, EventArgs e )
    {
        LogEvent( "This Timer has been ticked!", EventLogEntryType.Information );
    }

    protected override void OnStart( string[] args )
    {
        timer1.Tick += new EventHandler( timer1_Tick );
        timer1.Start();
        LogEvent( "This SuperService has started!", EventLogEntryType.Information );
    }

    protected override void OnStop()
    {
        LogEvent( "This SuperService has stopped.", EventLogEntryType.Information );
    }

    protected override void OnPause()
    {
        base.OnPause();
        timer1.Stop();
    }

    protected override void OnContinue()
    {
        base.OnContinue();
        timer1.Start();
    }

    static void LogEvent( String Message, EventLogEntryType type )
    {
        String source = "Logger";
        String log = "Application";
        if (!EventLog.SourceExists( source ))
        {
            EventLog.CreateEventSource( source, log );
        }

        EventLog eLog = new EventLog();
        eLog.Source = source;

        eLog.WriteEntry( Message, type );
    }
}
}

Теперь, когда я проверяю Event Viewer после запуска сервиса, он показывает следующие два события:

Этот SuperService запущен!

Служба успешно запущена.

Так что, похоже, что-то работает, я не вижу события, вызванного timer1_Tick.Кто-нибудь знает почему или может указать мне в правильном направлении, пожалуйста?Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 20 августа 2010

Используете ли вы System.Threading.Timer вместо System.Windows.Forms.Timer? Ссылка на учебник, который вы используете, содержит комментарии о том, что у пользователя возникла та же проблема, и он успешно переключился на System.Threading.Timer

для получения дополнительной информации (по вашей ссылке): Проблема с System.Timers.Timer, который не запускается в службе Windows .

1 голос
/ 20 августа 2010

Кроме того, службы Windows намного проще с topshelf .Проект с открытым исходным кодом, который позволяет вам написать свой сервис в виде консольного приложения / POCO, но получить поддержку установки / удаления / отладки из «контейнера сервисов», который абстрагирует весь клей.

myservice                                  (to run as console app for debugging)
myservice /install
myservice /uninstall
myservice /instance:{instance_name}
0 голосов
/ 20 августа 2010

Редактировать: Вот SO-ответ, охватывающий то, о чем я пишу ниже.

Служба Windows автоматически останавливается


Я считаю, что Windows остановит службу, если она «думает», что служба не имеет ничего общего.Я не могу вспомнить точный базовый «API», который делает это.Я боролся с этим несколько лет назад.


Есть ли что-то в вашем журнале событий с формулировкой: "Ничего не нужно делать моей службе. Завершение".Или какое-то такое сообщение, которое передает это словоблудие?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...