Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 102

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

Код для управлСния слуТбой слСдуСт Π΄Π°Π»Π΅Π΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ для запуска, останова, приостановки ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ остановки Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΊΠ½ΠΎΠΏΠΎΠΊ:

protected void buttonCommand_Click(object sender, System.EventArgs e) {

 Cursor Current = Cursors.WaitCursor;

 ServiceController controller =

 (ServiceController)listBoxServices.SelectedItem;

 if (sender == this.buttonStart) {

  controller.Start();

  controller.WaitForStatus(ServiceControllerStatus.Running);

 }  else if (sender == this.buttonStop) {

  controller.Stop();

  controller.WaitForStatus(ServiceControllerStatus.Stopped);

 } else if (sender == this.buttonPause) {

  controller.Pause();

  controller.WaitForStatus(ServiceControllerStatus.Paused);

 } else if (sender == this.buttonContinue) {

  controller.Continue();

  controller.WaitForStatus(ServiceControllerStatus.Running);

 }

 int index = listBoxService.SelectedIndex;

 RefreshServiceList();

 listBoxServices.SelectedIndex = index;

 Cursor.Current = Cursors.Default;

}


protected void buttonExit_Click(object sender, System.EventArgs e) {

 Application.Exit();

}


protected void buttonRefresh_Click(object sender, System.EventArgs e) {

 RefreshServiceList();

}

Π­Ρ‚ΠΎ дСйствиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, поэтому курсор Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ инструкции ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² курсор оТидания. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° WaitForStatus() ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ максимум Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 10 с, ΠΏΠΎΠΊΠ° слуТба ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ статус Π½Π° Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ПослС этого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ информация Π² ΠΎΠΊΠ½Π΅ списка обновляСтся, ΠΈ выбираСтся Ρ‚Π° ΠΆΠ΅ слуТба, Ρ‡Ρ‚ΠΎΠ±Ρ‹ выводился Π½ΠΎΠ²Ρ‹ΠΉ статус этой слуТбы.

Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выглядит Ρ‚Π°ΠΊ:

Поиск нСисправностСй

Поиск нСисправностСй Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для слуТб ΠΈΠ½Π°Ρ‡Π΅, Ρ‡Π΅ΠΌ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ слуТбу β€” созданиС сначала Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ тСстового ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’ этом случаС выполняСтся Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ запустится, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ слуТбу, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту сборку. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, со слуТбой ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

β–‘ Π’ слуТбС Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚Π΅ ошибки Π² ΠΎΠΊΠ½Π΅ сообщСний (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… слуТб, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° систСмС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°). ВмСсто этого для записи ошибок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ слуТбу рСгистрации событий. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ вывСсти ΠΎΠΊΠ½ΠΎ сообщСний для информирования ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π² клиСнтском ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΌ слуТбу.

β–‘ Π‘Π»ΡƒΠΆΠ±Ρƒ нСльзя Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ· ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°, Π½ΠΎ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡƒΡΡ процСссу слуТбы. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ исходный ΠΊΠΎΠ΄ слуТбы ΠΈ Π·Π°Π΄Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ прСрывания. Π’ мСню Visual Studio.NET Debug Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Processes ΠΈ присоСдинитС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ процСсс слуТбы.

β–‘ Π”ля ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° активности слуТб ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ слуТбС свои собствСнныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, это даст Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. МоТно Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для указания ΠΎΠ±Ρ‰Π΅Π³ΠΎ числа ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΡ‚Π°Ρ‚, врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Ρ‚.Π΄.

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ слуТбы

Если слуТба ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для выполнСния Π½Π° клиСнтской систСмС, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΊΠ½Π° сообщСний ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Если слуТба Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° сСрвСрС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠ΅Ρ€Ρ‚ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΌ Π·Π°Π»Π΅, слуТба Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΊΠ½ΠΎ сообщСний. Когда ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ сообщСний ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π²Π²ΠΎΠ΄, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π΄Π½Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ провСряСт сСрвСр Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΌ Π·Π°Π»Π΅; Π½ΠΎ всС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π΄Π°ΠΆΠ΅ Ρ…ΡƒΠΆΠ΅ β€” Ссли слуТба Π½Π΅ сконфигурирована ΠΊΠ°ΠΊ интСрактивная слуТба, ΠΎΠΊΠ½ΠΎ сообщСний открываСтся Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, скрытой, ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ станции. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ смоТСт ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° это ΠΎΠΊΠ½ΠΎ сообщСний, ΠΈ слуТба Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π°.

Никогда Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΠΉΡ‚Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° для слуТб, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° сСрвСрной систСмС. Никто Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ Π½Π° это Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.

Π’ Ρ‚Π΅Ρ… случаях, Π³Π΄Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ взаимодСйствиС с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ слуТбу. НСкоторыми ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ‚Π°ΠΊΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… слуТи ΡΠ²Π»ΡΡŽΡ‚ΡΡ Print Spooler, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ сообщСния Π½Π° Π±ΡƒΠΌΠ°Π³Π΅, ΠΈ слуТба NetMeeting Remote Desktop Sharing.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ слуТбу, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Allow service to interact with desktop (Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ слуТбС Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ столом) Π² Computer Management. Π­Ρ‚ΠΎ измСняСт Ρ‚ΠΈΠΏ слуТбы, добавляя ΠΊ Ρ‚ΠΈΠΏΡƒ Ρ„Π»Π°ΠΆΠΎΠΊ SERVICE_INTERACTIVE_PROCESS.

РСгистрация событий

Π‘Π»ΡƒΠΆΠ±Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, отмСчая Π΅Π΅ Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ событий. Π‘Π»ΡƒΠΆΠ΅Π±Π½Ρ‹ΠΉ класс, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ ΠΈΠ· ServiceBase, автоматичСски рСгистрируСт события, ΠΊΠΎΠ³Π΄Π° свойство AutoLog Π·Π°Π΄Π°Π½ΠΎ ΠΊΠ°ΠΊ true. Класс ServiceBase провСряСт это свойство ΠΈ заносит запись Π² ΠΆΡƒΡ€Π½Π°Π» ΠΏΡ€ΠΈ событиях запуска, остановки, ΠΏΠ°ΡƒΠ·Ρ‹ ΠΈ продолТСния. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΆΡƒΡ€Π½Π°Π»ΡŒΠ½ΠΎΠΉ записи, сдСланной слуТбой.

Для рСгистрации ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… событий ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классы ΠΈΠ· пространства ΠΈΠΌΠ΅Π½ System.Diagnostics.

АрхитСктура рСгистрации событий

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Event Log (Π–ΡƒΡ€Π½Π°Π» событий) хранится Π² Ρ‚Ρ€Π΅Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ²: Application, Security ΠΈ System. ΠŸΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ рССстра слуТбы рСгистрации событий, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Ρ€ΠΈ записи Π² HKLM\System\CurrentControlSet\Services\EventLog с конфигурациями, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. Π€Π°ΠΉΠ» ΠΆΡƒΡ€Π½Π°Π»Π° System ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠ· Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² систСмы ΠΈ устройств, прилоТСния ΠΈ слуТбы Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π² ΠΆΡƒΡ€Π½Π°Π» Application. Security являСтся ΠΆΡƒΡ€Π½Π°Π»ΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Бвойство Π°ΡƒΠ΄ΠΈΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΆΡƒΡ€Π½Π°Π» Security.

МоТно ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ эти события с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ административной ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Event Viewer. Event Viewer запускаСтся нСпосрСдствСнно ΠΈΠ· Server Explorer, входящСго Π² Visual Studio.NET. Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° ΠΏΡƒΠ½ΠΊΡ‚Π΅ Event Logs ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ запись Launch Event Viewer ΠΈΠ· контСкстного мСню:

Π’ ΠΆΡƒΡ€Π½Π°Π»Π΅ событий Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ информация:

β–‘ Type ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Information, Warning ΠΈ Error. Information β€” это рСдкая ΡƒΡΠΏΠ΅ΡˆΠ½Π°Ρ опСрация, Warning β€” ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, которая Π½Π΅ являСтся Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠΉ, ΠΈ Error β€” основная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ FailureAudit ΠΈ SuccessAudit, Π½ΠΎ эти Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΆΡƒΡ€Π½Π°Π»Π° Security.

β–‘ Date ΠΈ Time ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ врСмя, ΠΊΠΎΠ³Π΄Π° происходит событиС.

β–‘ Source β€” имя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ событиС. Source для ΠΆΡƒΡ€Π½Π°Π»Π° Application конфигурируСтся Π² HKLM\System\CurrentControlSet\Services\EventLog\Application. Под этим ΠΊΠ»ΡŽΡ‡ΠΎΠΌ конфигурируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ EventMessageFile для указания Π½Π° DLL рСсурса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….

β–‘ Category ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ событий Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΏΡ€ΠΈ использовании Event View.

β–‘ Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ события опрСдСляСт сообщСниС ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ событии.

ΠšΠ»Π°ΡΡΡ‹ рСгистрации событий

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΈΠΌΠ΅Π½ System.Diagnostics ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько классов для рСгистрации событий:

β–‘ Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса EventLog ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ внСсти записи Π² ΠΆΡƒΡ€Π½Π°Π» событий, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ прилоТСния ΠΊΠ°ΠΊ источники событий.

β–‘ EventLogEntry являСтся СдинствСнным Π²Ρ…ΠΎΠ΄ΠΎΠΌ Π² ΠΆΡƒΡ€Π½Π°Π» событий. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ EventLogEntryCollection ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ EventLogEntry.

β–‘ ΠšΠ»Π°ΡΡ EventLogInstaller ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для установки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° EventLog. EventLogInstaller Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ EventLog.CreateEventSource() для создания источника событий.

β–‘ Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ EventLogTraceListener ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΆΡƒΡ€Π½Π°Π» событий трассировки. Π­Ρ‚ΠΎΡ‚ класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ абстрактный класс TraceListener.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ рСгистрации событий

Если свойство AutoLog класса ServiceBase Π·Π°Π΄Π°Π½ΠΎ ΠΊΠ°ΠΊ true, Ρ‚ΠΎ автоматичСски Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ рСгистрация событий. Класс ServiceBase рСгистрируСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ событиС ΠΏΡ€ΠΈ запросах слуТбы для запуска, остановки, ΠΏΠ°ΡƒΠ·Ρ‹ ΠΈ продолТСния. Π’ классС ServiceInstaller создаСтся экзСмпляр EventLogInstaller, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ источник ΠΆΡƒΡ€Π½Π°Π»Π° событий. Π­Ρ‚ΠΎΡ‚ источник ΠΆΡƒΡ€Π½Π°Π»Π° событий ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ имя, ΠΊΠ°ΠΊ ΠΈ слуТба. Для записи события ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ WriteEntry() класса EventLog. Бвойство Source Π±Ρ‹Π»ΠΎ ΡƒΠΆΠ΅ Π·Π°Π΄Π°Π½ΠΎ Π² классС ServiceBase:

EventLog.WriteEntry("event log message");

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ рСгистрируСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ событиС. Если Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ создано событиС прСдупрСТдСния ΠΈΠ»ΠΈ ошибки, Ρ‚ΠΎ для опрСдСлСния этого Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ WriteEvent():

EventLog.WriteEntry("event log message", EventLogEntryType.Warning);

EventLog.WriteEntry("event log message", EventLogEntryType.Error);

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ рСгистрации событий Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Для слуТб класс ServiceBase автоматичСски добавляСт свойства рСгистрации событий. Если ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ событий Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠ°Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, это Π»Π΅Π³ΠΊΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Visual Studio.NET.

β–‘ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ToolBox для добавлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° EventLog Π² конструктор.