рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬреЛ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕реЗрд╡рд╛рдУрдВ рдФрд░ WinForm (C #) рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдЗрд╕ рд▓реЗрдЦ рдХреА рд░реВрдкрд░реЗрдЦрд╛:
- рд╕реЗрд╡рд╛ рдирд┐рд░реНрдорд╛рдг
- рдШрдЯрдирд╛ рджрд░реНрд╢рдХ
- рд╕реЗрд╡рд╛ рдХреЛрдб
- рд╕реЗрд╡рд╛ рдХреА рдЬрд╛рдБрдЪ (рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдирд╛)
- WinForm рдорд╛рдирдЪрд┐рддреНрд░рдг
рд╕реЗрд╡рд╛ рдирд┐рд░реНрдорд╛рдг
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЦреЛрд▓реЗрдВред рдЕрдЧрд▓реА рдлрд╝рд╛рдЗрд▓ тЖТ рдирдпрд╛ тЖТ рдкреНрд░реЛрдЬреЗрдХреНрдЯ тЖТ (рд╡рд┐рдВрдбреЛрдЬрд╝ рдбреЗрд╕реНрдХрдЯреЙрдк) тЖТ рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд┐рд╕ (.Net рдлреНрд░реЗрдорд╡рд░реНрдХ) тЖТ рдУрдХреЗред
рдЕрдЧрд▓рд╛ рдЖрдкрдХреЛ рдПрдХ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдЖрд░рдПрдордмреА рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ "рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдЬреЛрдбрд╝реЗрдВ" рдЪреБрдиреЗрдВред рдЖрдкрдХреЗ рдкрд╛рд╕ "ProjectInstaller.cs [Design]" рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ "F7" рдХреЛрдб рдпрд╛ RMB "рд╡реНрдпреВ рдХреЛрдб" рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдкрдХреЛ рд▓рд╛рдЗрди "InitializeComponent ()" рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕ рдкрд░ рдХрд░реНрд╕рд░ рд░рдЦреЗрдВ рдФрд░ "F12" рджрдмрд╛рдПрдВ, рдлрд┐рд░ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрдХреНрд░рдо рдФрд░ рд╕реНрдерд╛рди рдкрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рд╕реЗрд╡рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

рдШрдЯрдирд╛ рджрд░реНрд╢рдХ
рдпрд╣ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдИрд╡реЗрдВрдЯ рд╡реНрдпреВрдЕрд░ - рдИрд╡реЗрдВрдЯ рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рд╕рд╛рде рд╣рд░ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╣реИред рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд░реБрдХрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╡реЗрдВрдЯ рд▓реЙрдЧ рдореЗрдВ рдПрдХ рд╕реВрдЪрдирд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдХреА рдХреЛрдИ рднреА рдкрд╣реБрдВрдЪ, рд╕реБрд░рдХреНрд╖рд╛ рдкрд░рд┐рд╡рд░реНрддрди, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЯреНрдпреВрдирд┐рдВрдЧ, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡рд┐рдлрд▓рддрд╛ рдФрд░ рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рд╡рд┐рдлрд▓рддрд╛ - рдпрд╣ рд╕рдм рдШрдЯрдирд╛ рд▓реЙрдЧ рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╡реЗрдВрдЯ рд╡реНрдпреВрдЕрд░ рдЯреЗрдХреНрд╕реНрдЯ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред
рдЗрд╕реЗ рдХреИрд╕реЗ рдЦреЛрд▓реЗрдВ? - "рдЗрд╡реЗрдВрдЯ рд╡реНрдпреВрдЕрд░" (рдЦреЛрдЬ рдореЗрдВ) тЖТ "рдЗрд╡реЗрдВрдЯ рд▓реЙрдЧ рджреЗрдЦреЗрдВ" рд╢реБрд░реВ рдХрд░реЗрдВред
рдЕрдЧрд▓рд╛, "рдХрд╕реНрдЯрдо рджреГрд╢реНрдп" тЖТ "рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдШрдЯрдирд╛рдПрдБред" рдпрд╣рд╛рдВ рд╣рдо рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ, рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
3 рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓реЙрдЧ рд╣реИрдВ: рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдПрдкреНрд▓рд┐рдХреЗрд╢рди), рд╕рд┐рд╕реНрдЯрдо (рд╕рд┐рд╕реНрдЯрдо) рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ (рд╕реБрд░рдХреНрд╖рд╛)ред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдгрд╛рд▓реА (рд╕рд┐рд╕реНрдЯрдо) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕реЗрд╡рд╛ рдХреЛрдб
рд╣рдореЗрдВ рд╕реЗрд╡рд╛ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде .cs рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ "Service1.cs" рд╣реИ, рдЗрд╕реЗ рдЦреЛрд▓реЗрдВред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 2 рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
- OnStart (string [] args) - рдЬрдм рд╕реЗрд╡рд╛ рд╢реБрд░реВ рд╣реЛрдЧреА, рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд
- OnStop () - рдЬрдм рд╕реЗрд╡рд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИ рддреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреБрдЫ рдФрд░ рддрд░реАрдХреЗ рднреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдореЗрдВ рдЙрдирдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЬреЛ рдбреЗрдЯрд╛ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдЙрд╕реЗ рдЕрдкрдбреЗрдЯреЗрдб рдЯреЗрдХреНрд╕реНрдЯ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
using System.IO;
OnStart рдкрджреНрдзрддрд┐ рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ (string [] args):
EventLog myLog;
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рд╕рдорд╛рдзрд╛рди "рд╕рдорд╛рдзрд╛рди" рдПрдХрддреНрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ -> "рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг"ред рд╕рдлрд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдмрд╛рдж, рдЖрдк рдСрдкрд░реЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реЗрд╡рд╛ рдХреА рдЬрд╛рдБрдЪ (рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдирд╛)
рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕реЗрд╡рд╛ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдХреЗрд╡рд▓ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 InstallUtil.exe \ .exe (InstallUtil.exe C:\Users\\source\repos\WindowsService1\WindowsService1 \bin\Debug\WindowsService1.exe) : InstallUtil.exe -u \ .exe
рдЕрдЧрд▓рд╛, рд╡рд┐рди + рдЖрд░ рдХреБрдВрдЬреА рджрдмрд╛рдПрдВред "Services.msc" рджрд░реНрдЬ рдХрд░реЗрдВред рд╣рдо рд╕реВрдЪреА рдореЗрдВ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдкрд╛рддреЗ рд╣реИрдВ, рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдФрд░ "рдкреНрд░рд╛рд░рдВрдн" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдПрдХ рд╕рдлрд▓ рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рдж, рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрде рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рд╕реНрдерд┐рдд рд╣реЛрдЧреАред
рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд╛рдж рд╕реЗрд╡рд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рди рднреВрд▓реЗрдВред
WinForm рдорд╛рдирдЪрд┐рддреНрд░рдг
рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд▓реЗрдЦ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ WinForm рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдпрд╣ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдПрдХ рд╕реЗрд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, WinForm рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИред рдЖрдЧреЗ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдлреЙрд░реНрдо рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред "рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд┐рд╕ 1" тЖТ рдЖрд░рдПрдордмреА тЖТ рдПрдб тЖТ рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдо тЖТ рдРрдбред рдФрд░ рдирд┐рдореНрди рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВред рдЕрдЧрд▓рд╛, "Program.cs" рдлрд╝рд╛рдЗрд▓ рдмрджрд▓реЗрдВред
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЬреЛрдбрд╝реЗрдВ:
using System.Windows.Forms; using System.Security.Principal; using System.ComponentModel; using System.Diagnostics;
рдФрд░ рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдмрджрд▓реЗрдВ:
static void Main(string[] args) { WindowsPrincipal windowsPricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); bool hasAdministrativeRight = windowsPricipal.IsInRole(WindowsBuiltInRole.Administrator); if (hasAdministrativeRight == false)
рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ "SystemError" рдЬреЛрдбрд╝реЗрдВред ("WindowsService1" -> RMB -> рдЬреЛрдбрд╝реЗрдВ -> рд╡рд░реНрдЧ -> рдЬреЛрдбрд╝реЗрдВ)ред рдпрд╣рд╛рдВ рд╣рдо рдПрд░рд░ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗред рдЗрд╕реЗ рдмрджрд▓реЗрдВ:
public string EntryType{ get; set; } public string EventLog{ get; set; } public string MachineName { get; set; } public string AppName { get; set; } public string Message { get; set; } public string TimeWritten { get; set; }
"Service1.cs" рдореЗрдВ рдЖрдЧреЗ рд╣рдо "рд░рдирдлрд╝реНрд░реЛрдордлрд╝реЙрд░реНрдо (рд╕реНрдЯреНрд░рд┐рдВрдЧ [] рдЖрд░реНрдЧреНрд╕)" рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рддреА рд╣реИред
public void RunFromForm(string[] args) { OnStart(args); OnStop(); }
рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ "GetListErrors" рдЬреЛрдбрд╝реЗрдВред ("WindowsService1" -> RMB -> рдЬреЛрдбрд╝реЗрдВ -> рд╡рд░реНрдЧ -> рдЬреЛрдбрд╝реЗрдВ)ред рдпрд╣рд╛рдВ рд╣рдо рдлрд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЬреЛрдбрд╝реЗрдВ:
using System.IO;
рдЗрд╕реЗ рдмрджрд▓реЗрдВ:
string filepath = AppDomain.CurrentDomain.BaseDirectory + @"\ServiceLog.txt"; SystemError systemError; public List<SystemError> listSysErrs; public void ReadFile()
рдЕрдЧрд▓рд╛, "Form1.cs" рдлрд╝реЙрд░реНрдо рдХрд╛ рдХреЛрдб рдмрджрд▓реЗрдВред рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЬреЛрдбрд╝реЗрдВ:
using System.ServiceProcess; using System.Diagnostics;
рдЗрд╕реЗ рдмрджрд▓реЗрдВ:
Service1 service = new Service1(); List<SystemError> listSysErrs; string[] args; public Form1(string[] args) { InitializeComponent(); this.args = args; if (Environment.UserInteractive)
рдЕрдм рдЖрдк рдирд┐рдпрдорд┐рдд рдЖрд╡реЗрджрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
