рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдмрдВрдзрди рдЯреАрдо рдореЗрдВ рдХрд╛рдо рдмрд┐рд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ - рдХрдВрдкрдиреА рдХреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЛрдб рд╕рддреНрдпрд╛рдкрди, рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░, рдХреНрдпрд╛ рдЕрджреНрднреБрдд рд╣реИ, рд╣рдо рдЗрд╕ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред рдЖрдЧреЗ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐, C # рдФрд░ C ++ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЕрд▓рдЧ рд╕реНрддрд░ рдХрд╛ рдЬреНрдЮрд╛рди рд╣реЛрдиреЗ рдкрд░, рдореИрдВрдиреЗ рдлрд┐рдХреНрд╕ рдХреНрдпреВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ WCF рд╕реЗрд╡рд╛ рдмрдирд╛рдИред рдФрд░ рдореИрдВрдиреЗ рдпрд╣ рдХреНрдпреЛрдВ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдСрдЯреЛрдореЗрд╢рди рдПрдХ рдмрд╛рд░ рдпрд╛ 117 рдкреЗрдЬ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рдирд┐рд░реНрджреЗрд╢
рдПрдХ рдЫреЛрдЯрд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рддрд╛рдХрд┐ рдЖрдк рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рдореИрдВ рд╕реНрд╡рдЪрд╛рд▓рди рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЛ рд▓реЗрдХрд░ рдЗрддрдирд╛ рдЪрд┐рдВрддрд┐рдд рдХреНрдпреЛрдВ рд╣реВрдВред
рд╡реАрдо рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдПрдХ рдмрдбрд╝реА рдЕрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдп рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛ - рдореИрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореИрдиреЗрдЬрдореЗрдВрдЯ рдЯреАрдо рдХреА рдЯреАрдо рд▓реАрдб рдереА, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рддреИрдирд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдереАред рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рджрд╕реНрддрд╛рд╡реЗрдЬ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рд╕рдорд░реНрдерди рд╕реЗ рдореИрдВрдиреЗ рднреА рдирд┐рдкрдЯрд╛ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рд╣рдореЗрд╢рд╛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЧрдВрднреАрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрдИ рджрд░реНрдЬрдиреЛрдВ рдереЗ, рдЕрдЧрд░ рд╕реИрдХрдбрд╝реЛрдВ рдирд╣реАрдВред
рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХреА рдФрд░ рдЬрд╡рд╛рдм рдорд┐рд▓рд╛ - рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЗрд╕рдХреА рд▓рд╛рдЧрдд рдкрд░ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реБрдЖ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреНрдпреВрдП рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдФрд░ рд╣рдо, рдПрд╕рдПрдо рдЯреАрдо, рд╕реАрдзреЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реБрдПред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдЗрд╕рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рдЧрдИ рдереА, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рджрд░реНрдЬрдиреЛрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдереЗред
рдкреНрд░рддреНрдпреЗрдХ рдирдП рдмрд┐рд▓реНрдб, рдкреНрд░рддреНрдпреЗрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЕрдкрдиреЗ рдмрджрд▓рд╛рд╡ рдХрд┐рдПред рдкреБрд░рд╛рдиреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдХреНрд╕рд░ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рдереЗред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рд╡рд╛рд▓реА рдорд╢реАрдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ, рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рдирд┐рд░рдВрддрд░ рд╡рд┐рдЪрд╛рд░-рд╡рд┐рдорд░реНрд╢ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдкрдбрд╝рддрд╛ рдерд╛ рдХрд┐ "рдЕрдм рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ?" рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмреЗрд╣рдж рдЕрдХрд▓реНрдкрдиреАрдп рдереАред
рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрд░рд┐рдпрд▓ рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░ рдореЗрдВ 117-рдкреГрд╖реНрда рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдпрд╛ рдерд╛ред 9. рд╣рдореЗрдВ рдмрд╣реБрдд, рдмрд╣реБрдд рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝рдирд╛ рдерд╛ред рдХрднреА-рдХрднреА рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдПрдХ рдмрдВрдж рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдмрдВрдж рдЖрдВрдЦреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рдерд╛ред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЯрд╛рд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред рдореИрдВрдиреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд╕рдорд░реНрдерди рдФрд░ рдХреБрдЫ рд╣реА рд╕реЗрдХрдВрдб рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдкрдиреЗ рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ рдЖ рдЧрдИ, рдФрд░ рдореИрдВрдиреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ред рдЗрд╕рдореЗрдВ, рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рд▓рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрдИ рд▓реЙрдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ред рдкрд╛рдпрдерди рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдиреЗ рдореБрдЭреЗ рдореИрдиреБрдЕрд▓ рдХрд╛рдо рдХреА рд░рд╛рдХреНрд╖рд╕реА рд░рд╛рд╢рд┐ рд╕реЗ рдмрдЪрд╛рдпрд╛ред рдореБрдЭреЗ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдЖрдИ, рдФрд░ рдЗрд╕рдХреА рдорджрдж рд╕реЗ рд╣рдордиреЗ рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рдпрд╛ред рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП "рдмрд┐рд▓реНрд▓реА logfile123 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдХрдИ рджрд┐рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ grep рдХреБрдЫ_рд╕реНрдкреЗрд╢рд▓ тАЭ, рдорд┐рдирдЯ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдерд╛ ... рдФрд░ рдЙрдмрд╛рдКред
рд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рдмрдВрдзрди - рдирдпрд╛ рд░реЛрдорд╛рдВрдЪ
рдореИрдВ рдПрдХ рдЫреЛрдЯреА рд╕реАрдПрдо рдЯреАрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреАрдо рд▓реАрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╡реАрдо рдЖрдпрд╛ рдерд╛ред рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рди, рдЕрдиреБрдХреВрд▓рди рдФрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдФрдЬрд╛рд░ рдЪреБрдирдиреЗ рдореЗрдВ рдкреВрд░реА рдЖрдЬрд╛рджреА рдереА! рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛, рдХреЛрдб-рд╢реИрд▓реА, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рджреВрд╕рд░реА рдУрд░, рдПрд╕рдПрдо рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп, рд╕рд╛рд╣рд╕ рдФрд░ рдзреИрд░реНрдп рд╣реИред
Veeam, рдХрдИ рдЕрдиреНрдп рдХрдВрдкрдирд┐рдпреЛрдВ рдХреА рддрд░рд╣, рдЙрддреНрдкрд╛рдж рдЕрдкрдбреЗрдЯ рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред рдЕрдкрдбреЗрдЯ рдореЗрдВ рд╕реИрдХрдбрд╝реЛрдВ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рдереАрдВ, рдФрд░ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдЬреЛ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдмрджрд▓ рдЧрдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рд╡реЙрд▓реНрдпреВрдорд┐рдирд╕ рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ рдЬреЛ рдЯреАрдПрдлрдПрд╕ рдореЗрдВ рдЪрдврд╝ рд╕рдХрддреА рд╣реИ, рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рд╕реЙрд░реНрдЯ рдХрд░ рд╕рдХрддреА рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреВрд░рдХ рдереА, рдпрд╣ рдзреАрд░реЗ-рдзреАрд░реЗ рд╡рд┐рд╢рд╛рд▓ рд╣реЛ рдЧрдИ, рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧ рдЧрдпрд╛ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдХреБрдЫ рдмреИрд╕рд╛рдЦреА рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдХреБрдЫ рдХрд░рдирд╛ рдЬрд░реВрд░реА рдерд╛ред
рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рдереЗ
рдпрд╣рд╛рдБ рдореБрдЦреНрдп рд╢рд┐рдХрд╛рдпрддреЗрдВ рд╣реИрдВ:
- рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдХрддрд╛рд░ред рдирд┐рдЬреА рдлрд┐рдХреНрд╕ рдЦрддреНрдо рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд╡реЗрдм рдкреЗрдЬ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рд╣реЛрдЧреА рдФрд░ рдЖрдк рдЕрдкрдирд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реВрдЪрдирд╛ рдирд╣реАрдВ рд╣реИ - рдЕрд╕реЗрдВрдмрд▓реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЬреАрдпреВрдЖрдИ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рд▓реЙрдЧ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред
- рдирд┐рдЬреА рдлрд╝рд┐рдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдмрд┐рд▓реНрдб рдЗрддрд┐рд╣рд╛рд╕ рдирд╣реАрдВ рд╣реИред
рдЗрди рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдФрд░ рд╕реБрдЦрдж рдЫреЛрдЯреА рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдордирд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдирд┐рдЬреА рд╕реБрдзрд╛рд░ рдХреНрдпрд╛ рд╣реИрдВ
рд╣рдорд╛рд░реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдирд┐рдЬреА рдирд┐рд░реНрдзрд╛рд░рдг рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рд╣реИ, рдЬреЛ рд░рд┐рд▓реАрдЬ рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рдЯреАрдо рдлрд╛рдЙрдВрдбреЗрд╢рди рд╕рд░реНрд╡рд░ рдХреЗ рд╕рдорддрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдЯреАрдПрдлрдПрд╕ рд╢рдмреНрджрд╛рд╡рд▓реА рд╕реЗ рдмрд╣реБрдд рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
- рдЪреЗрдХ-рдЗрди - рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдПрдХ рд╕реЗрдЯ, рдЬреЛ TFS рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдЪреЗрдХ рдХреЛ рдХрдВрдЯреАрдиреНрдпреВрдЕрд╕ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди / рдЧреЗрдЯреЗрдб рдЪреЗрдХ-рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕рд╣реА рдХреЛрдб рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдФрд░ рдЕрдВрддрд┐рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЪреЗрдХ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- рдЕрд▓рдорд╛рд░рд┐рдпрд╛рдБ - рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЬреЛ рд╕реАрдзреЗ TFS рдореЗрдВ рд╕реНрдерд┐рдд рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдирд╛рдо рд╕реЗ рд╕реБрд▓рдн рд╣реИред рд╢реЗрд▓рд╕реЗрдЯ рдХреЛ рдбреЗрд╡рд▓рдкрд░ рдХреА рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЯреАрдПрдлрдПрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╕рдВрд╢реЛрдзрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢реЗрд▓рд╕реЗрдЯ рдХреЛ рдЯреАрдПрдлрдПрд╕ рдореЗрдВ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж рдПрдХ рдЪреЗрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреЗрдЯ-рдЪреЗрдХрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмрд┐рд▓реНрдбрд░ рдкрд░ рд╢реЗрд▓рд╕реЗрдЯ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЬрд╛рдБрдЪ рд╕рдлрд▓ рд╣реЛрддреА рд╣реИ, рддреЛ рд╢реЗрд▓реНрдХреЗрдЯ рдЪреЗрдХ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ!
рдпрд╣рд╛рдБ рдирд┐рдЬреА рдлрд┐рдХреНрд╕ рдмрд┐рд▓реНрдбрд░ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:
- рд╢реЗрд▓рд╕реЗрдЯ рдХрд╛ рдирд╛рдо (рд╕рдВрдЦреНрдпрд╛) рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рдЬреА рдлрд╝рд┐рдХреНрд╕реНрдб рдмрд┐рд▓реНрдбрд░ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рдЙрддреНрдкрд╛рдж рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╢реЗрд▓рд╕реЗрдЯ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди / рд╕реБрдзрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рд░рд┐рд▓реАрдЬ рд╢рд╛рдЦрд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдмрдиреА рд╣реБрдИ рд╣реИред
- рдПрдХ рдирд┐рдЬреА рдлрд┐рдХреНрд╕ рдмрд┐рд▓реНрдбрд░ рдкрд░, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЪрд▓ рд░рд╣реА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдЬреА рдлрд┐рдХреНрд╕ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рд╕рдВрдХрд▓рд┐рдд рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдирд┐рдЬреА рдлрд┐рдХреНрд╕ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреИрдЯрд▓реЙрдЧ рдореЗрдВ рд╢реЗрд▓рд╕реЗрдЯ рдирд╛рдо рд╣реИ, рдЬреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИред
- рдирд┐рдЬреА рдлрд┐рдХреНрд╕ рдмрд┐рд▓реНрдбрд░ рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдЙрд╕рдХреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдЙрд╕ рдЙрддреНрдкрд╛рдж рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХ рдирд┐рдЬреА рдлрд╝рд┐рдХреНрд╕реЗрд╕ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╢реЗрд▓рд╕реЗрдЯ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХ рдирд┐рдЬреА рдлрд╝рд┐рдХреНрд╕реЗрд╕ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдлрд╝рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрд┐рд▓реНрдб рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐, рдирд┐рдЬреА рдлрд╝рд┐рдХреНрд╕реЗрд╕ рдХреА рдХрддрд╛рд░ рдФрд░ рдЙрдирдХреЗ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдирд┐рдЬреА рдлрд╝рд┐рдХреНрд╕реЗрд╕ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХрддрд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореЗрд░рд╛ рдХреНрдпрд╛ рдерд╛?
- рдПрдХ рдирд┐рдЬреА рдлрд┐рдХреНрд╕ рдмрд┐рд▓реНрдбрд░, рдЬреЛ рджрд┐рдП рдЧрдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ TFS рд╢реЗрд▓рд╕реЗрдЯ рд╕реЗ рдирд┐рдЬреА рдлрд┐рдХреНрд╕ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред
- Veeam.Builder.Agent - рд╡реЗрдо рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд WCF рд╕реЗрд╡рд╛, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рддрд╣рдд рдХрдВрд╕реЛрд▓ рдореЛрдб рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреА рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИред
- IIS рд╡реЗрдм рд╕реЗрд╡рд╛ рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдо рдкрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╢реЗрд▓рд╕реЗрдЯ рдирд╛рдо, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рдПрдХ рдирд┐рдЬреА рдлрд┐рдХреНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдерд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЬреНрдЮрд╛рди C ++ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ C # рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛, рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдПрдХ рд╢реМрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред
- рдЕрдиреБрднрд╡реА рд╕рд╣рдХрд░реНрдореА, Google рдФрд░ рднрд╛рд░рддреАрдп MSDN рд╕рднреА рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдХреЗ рд╕реНрд░реЛрдд рд╣реИрдВред
рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдореИрдВрдиреЗ рдлрд┐рдХреНрд╕рд░реНрд╕ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдХрддрд╛рд░ рдФрд░ рдмрд┐рд▓реНрдбрд░ рдкрд░ рдЙрдирдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд▓реЙрдиреНрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдпрд╣рд╛рдБ рд╕рдорд╛рдзрд╛рди рдХреЗ рднрд╛рдЧ рд╣реИрдВ:
- QBuilder.AppQueue рдореЗрд░реА WCF рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдмрд┐рд▓реНрдб рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдФрд░ рдмрд┐рд▓реНрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП Veeam.Builder.Agent рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИред
- dummybuild.exe рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдФрд░ рджреГрд╢реНрдп рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕реНрдЯрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИред рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- QBuilder.AppLauncher - WCF рд╕реЗрд╡рд╛ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреА рд╣реИ рдФрд░ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП Veeam.Builder.Agent рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдПрдирд╛рд▓реЙрдЧ рд╣реИред рдореВрд▓ рд╕реЗрд╡рд╛ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИ рдФрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рднреА рдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореЗрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдХрдВрд╕реЛрд▓ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдордиреЗ рдПрдХ рдирдпрд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ рдЬреЛ рдХрдИ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╡реЗрдВрдЯ рд▓реЙрдЧ рд░рдЦ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдЦ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд▓реЗрдЦ рдЯреАрдПрдлрдПрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣рд┐рдд рдирд┐рдЬреА рд╕реБрдзрд╛рд░реЛрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рд╣рд╛рдпрдХ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

WCF рд╕реЗрд╡рд╛рдПрдБ рдмрдирд╛рдирд╛
WCF рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд╡рд┐рд╕реНрддреГрдд рд▓реЗрдЦ рд╣реИрдВред рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛
Microsoft рд╕рд╛рдЗрдЯ рдХреА
рд╕рд╛рдордЧреНрд░реА рдкрд╕рдВрдж рдЖрдИред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкрд░рд┐рдЪрд┐рдд рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ
рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЛ рд░рдЦрд╛ред рдЪрд▓реЛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ!
QBuilder.AppLauncher рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдБ
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рд╕реЗрд╡рд╛ рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рдбрд┐рд╕реНрдХ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рд╣реЛ рдФрд░ рдХрд╛рдо рдХрд░реЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдб рджреЛрдиреЛрдВ QBuilder.AppLauncher рдФрд░ QBuilder.AppQueue рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЛ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛ред
- QBuilder.AppLauncher рдирд╛рдордХ рдПрдХ рдирдпрд╛ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ
- рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВред Service.cs рдкрд░ рдЬрд╛рдПрдВ
- рдирд╛рдо рдХрд╛ рдирд╛рдо QBuilder.AppLauncher рдкрд░ рд░рдЦреЗрдВ
- рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝реЗрдВ:
рдПрдХред System.ServiceModel.dll
рдЦред System.ServiceProcess.dll
рд╕реАред System.Configuration.Install.dll
- рдирд┐рдореНрди рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ Service.cs рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
using System.ComponentModel; using System.ServiceModel; using System.ServiceProcess; using System.Configuration; using System.Configuration.Install;
рдЖрдЧреЗ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
using System.Reflection; using System.Xml.Linq; using System.Xml.XPath;
- рд╣рдо IAppLauncher рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
- AppLauncherService рд╡рд░реНрдЧ рдореЗрдВ, рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ TestConnection:
public class AppLauncherService : IAppLauncher { public bool TestConnection() { return true; } }
- рдПрдХ рдирдпрд╛ AppLauncherWindowsService рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдБ рдЬреЛ ServiceBase рд╡рд░реНрдЧ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддрд╛ рд╣реИред ServiceHost рдХрд╛ рд▓рд┐рдВрдХ - рд╕реНрдерд╛рдиреАрдп рд╡реИрд░рд┐рдПрдмрд▓ рд╕рд░реНрд╡рд┐рд╕рд╣реЛрд╕реНрдЯ рдХреЛ рдЬреЛрдбрд╝реЗрдВред рд╣рдо рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ ServiceBase.Run (рдирдпрд╛ AppLauncherWindowsService ()) рдХрд╣рддреЗ рд╣реИрдВ:
public class AppLauncherWindowsService : ServiceBase { public ServiceHost serviceHost = null; public AppLauncherWindowsService() {
- OnStart () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ рдЬреЛ рдирдпрд╛ ServiceHost рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ:
protected override void OnStart(string[] args) { if (serviceHost != null) { serviceHost.Close(); }
- рд╕рд░реНрд╡рд┐рд╕рд╣реЛрд╕реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ onStop рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ:
protected override void OnStop() { if (serviceHost != null) { serviceHost.Close(); serviceHost = null; } } }
- рдЗрдВрд╕реНрдЯрд╛рд▓рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдПрдХ рдирдИ ProjectInstaller рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ рдФрд░ RunInstallerAttribute рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ, рдЬреЛ True рдкрд░ рд╕реЗрдЯ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ installutil.exe рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
[RunInstaller(true)] public class ProjectInstaller : Installer { private ServiceProcessInstaller process; private ServiceInstaller service; public ProjectInstaller() { process = new ServiceProcessInstaller(); process.Account = ServiceAccount.LocalSystem; service = new ServiceInstaller(); service.ServiceName = "QBuilder App Launcher"; Installers.Add(process); Installers.Add(service); } }
- App.config рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдмрджрд▓реЗрдВ:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <service name="QBuilder.AppLauncher.AppLauncherService" behaviorConfiguration="AppLauncherServiceBehavior"> <host> <baseAddresses> <add baseAddress="http://localhost:8000/QBuilderAppLauncher/service"/> </baseAddresses> </host> <endpoint address="" binding="wsHttpBinding" contract="QBuilder.AppLauncher.IAppLauncher" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services> <behaviors> <serviceBehaviors> <behavior name="AppLauncherServiceBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="False"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
рд╕реЗрд╡рд╛ рдХреА рд╕реЗрд╡рд╛рдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛
- рд╣рдо рд╕реЗрд╡рд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
- рдЗрд╕реЗ installutil.exe рдХрдорд╛рдВрдб рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
1) рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдВ рдЬрд╣рд╛рдВ рд╕рдВрдХрд▓рд┐рдд рд╕реЗрд╡рд╛ рдлрд╝рд╛рдЗрд▓ рдирд┐рд╣рд┐рдд рд╣реИ
2) рд╕реНрдерд╛рдкрдирд╛ рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ:
C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ InstallUtil.exe - рд╣рдо рд╕рд░реНрд╡рд┐рд╕реЗрдЬ.рдПрдордПрд╕рд╕реА рд╕реНрдиреИрдк-рдЗрди рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреВрдмреНрдпреВрд▓рд░ рдРрдк рд▓реЙрдиреНрдЪрд░ рд╕реЗрд╡рд╛ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
- рд╣рдо WcfTestClient.exe рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрд╡рд╛ рдХреА рд╕реЗрд╡рд╛рдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ VisualStudio рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рд╣реИ:
1) WcfTestClient рдЪрд▓рд╛рдПрдВ
2) рд╕реЗрд╡рд╛ рдкрддрд╛ рдЬреЛрдбрд╝реЗрдВ: http: // localhost: 8000 / QBuilderAppLauncher / рд╕реЗрд╡рд╛
3) рд╕реЗрд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЦреБрд▓рддрд╛ рд╣реИ:

4) рд╣рдо рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ TestConnection, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдорд╛рди рджреЗрддрд╛ рд╣реИ:

рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдбрд┐рд╕реНрдХ рд╣реИ, рд╣рдо рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдореБрдЭреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдЬрдм рдореИрдВрдиреЗ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ рдХреИрд╕реЗ рдЦрд░реЛрдВрдЪ рд╕реЗ рдбрдмреНрд▓реНрдпреВрд╕реАрдПрдл рд╕реЗрд╡рд╛ рд▓рд┐рдЦрдирд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд▓реЗрдЦреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкрдврд╝рд╛ред рдореЗрдЬ рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рджрд░реНрдЬрди рдпрд╛ рджреЛ рдореБрджреНрд░рд┐рдд рдкрддреНрд░рдХ рдереЗ, рдЬрд┐рди рдкрд░ рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рддреБрд░рдВрдд рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдФрд░ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рд╕реЗрд╡рд╛ рдХреЛ рдбрд┐рд╕реНрдХ рдмрдирд╛рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмреЗрдХрд╛рд░ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ рдпрджрд┐ рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХрдВрд╕реЛрд▓ рд╕реЗ рдЪрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рдбрд┐рдмрдЧрд┐рдВрдЧ рдЪрд░рдг рдореЗрдВ рдФрд░ рдХрдИ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХрд┐рдП рдмрд┐рдирд╛ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдбрд┐рдмрдЧрд░реНрд╕ рдХреЗ рдердХрд╛рдК рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдореЛрдб рдореЗрдВ рд╣реИ рдХрд┐ QBuilder.AppLauncher рд╕реЗрд╡рд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- AppLauncherWindowsService рд╡рд░реНрдЧ рдореЗрдВ RunInteractive рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдХрдВрд╕реЛрд▓ рдореЛрдб рдореЗрдВ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
static void RunInteractive(ServiceBase[] services) { Console.WriteLine("Service is running in interactive mode."); Console.WriteLine(); var start = typeof(ServiceBase).GetMethod("OnStart", BindingFlags.Instance | BindingFlags.NonPublic); foreach (var service in services) { Console.Write("Starting {0}...", service.ServiceName); start.Invoke(service, new object[] { new string[] { } }); Console.Write("Started {0}", service.ServiceName); } Console.WriteLine(); Console.WriteLine("Press any key to stop the services and end the process..."); Console.ReadKey(); Console.WriteLine(); var stop = typeof(ServiceBase).GetMethod("OnStop", BindingFlags.Instance | BindingFlags.NonPublic); foreach (var service in services) { Console.Write("Stopping {0}...", service.ServiceName); stop.Invoke(service, null); Console.WriteLine("Stopped {0}", service.ServiceName); } Console.WriteLine("All services stopped."); }
- рд╣рдо рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ - рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред / рдХрдВрд╕реЛрд▓ рд╡рд┐рдХрд▓реНрдк рдФрд░ рдПрдХ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рдХреЗ рд╕рд╛рде, рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдореЛрдб рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рд╣рдо рдЗрд╕реЗ рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВред
public static void Main(string[] args) { var services = new ServiceBase[] { new AppLauncherWindowsService() };
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреЛрдбрд╝реЗрдВ
рд╕реЗрд╡рд╛ рдХреЛ рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рдирд╣реАрдВ рд╣реИред рд╡рд╣ рдХреЗрд╡рд▓ рдХрдВрд╕реЛрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреА рдУрд░ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдЖрдк рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ, рд╡реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╕реНрдкрд┐рди рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЯрд╛рд╕реНрдХ рдореИрдиреЗрдЬрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдмрд╛рдд рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдп рдЙрджрд╛рд╣рд░рдг рд╣реИред
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡реИрд╢реНрд╡рд┐рдХ рд╡реИрд░рд┐рдПрдмрд▓ рдПрдкрдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕реЗ public class AppLauncherService : IAppLauncher
рдЬреЛрдбрд╝реЗрдВ public class AppLauncherService : IAppLauncher
:
public class AppLauncherService : IAppLauncher { Process appProcess;
- рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрд╕реА рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ:
public bool IsStarted() { if (appProcess!=null) { if (appProcess.HasExited) { return false; } else { return true; } } else { return false; } }
рдлрд╝рдВрдХреНрд╢рди рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд╛рд▓реВ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдХреНрд░рд┐рдп рд╣реИ рддреЛ рд╕рд╣реА рд╣реИред
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ:
public bool Start(string fileName, string arguments, string workingDirectory, string domain, string userName, int timeoutInMinutes) { ProcessStartInfo processStartInfo = new ProcessStartInfo(); processStartInfo.FileName = fileName; processStartInfo.Arguments = arguments; processStartInfo.Domain = domain; processStartInfo.UserName = userName; processStartInfo.CreateNoWindow = false; processStartInfo.UseShellExecute = false; try { if (appProcess!=null) { if (!appProcess.HasExited) { Console.WriteLine("Process is still running. Waiting..."); return false; } } } catch (Exception ex) { Console.WriteLine("Error while checking process: {0}", ex); } try { appProcess = new Process(); appProcess.StartInfo = processStartInfo; appProcess.Start(); } catch (Exception ex) { Console.WriteLine("Error while starting process: {0}",ex); } return true; }
рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдбреЛрдореЗрди рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реЗрд╡рд╛ рдкреНрд░рд╢рд╛рд╕рдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрдВрд╕реЛрд▓ рд╕рддреНрд░ рд╕реЗ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рддреА рд╣реИред
QBuilder.AppLauncher рд╕реЗрд╡рд╛ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╕реЗрд╡рд╛ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рддреНрд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдпрд╣ рдЬрд╛рдВрдЪрддреА рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓ рд░рд╣реА рд╣реИ рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реА рд╣реЛ рдЪреБрдХреА рд╣реИред
- рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ QBuilder.AppLauncher.exe рдФрд░ QBuilder.AppLauncher.exe.config рдлрд╛рдЗрд▓реЗрдВ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╣реИрдВред рд╕реНрд╡-рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рднреА рд╡рд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИред
- рд╣рдо рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
- рд╕реЗрд╡рд╛ рдХреА рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдЦреБрд▓реЗрдЧреА:

рд╕рд░реНрд╡рд┐рд╕ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреЛрдИ рднреА рдХреАрд╕реНрдЯреНрд░реЛрдХ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред
- рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, wcftestclient.exe рдЪрд▓рд╛рдПрдВ, рдЬреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рдо http: // localhost: 8000 / QBuilderAppLauncher / рд╕реЗрд╡рд╛ рдореЗрдВ рд╕реЗрд╡рд╛ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рд▓рд┐рдВрдХ рдЦреЛрд▓рддреЗ рд╣реИрдВред
рдпрджрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЬрд╛рдПрдВред
QBuilder.AppQueue рд╕реЗрд╡рд╛ рдмрдирд╛рдирд╛
рдФрд░ рдЕрдм рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реЗрд╡рд╛ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛! рд╣рдо рдЕрдзреНрдпрд╛рдп "QBuilder.AppLauncher рд╕реЗрд╡рд╛ рдмрдирд╛рдирд╛" рдФрд░ рдЕрдзреНрдпрд╛рдп "рдХрдВрд╕реЛрд▓ рд╕реЗ рд▓реЙрдиреНрдЪ рдЬреЛрдбрд╝рдирд╛" рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ, рдХреЛрдб рдореЗрдВ AppQueue рдХреЗ рд╕рд╛рде AppLauncher рдХреА рдЬрдЧрд╣ рд▓реЗрддреЗ рд╣реИрдВред
рдХрддрд╛рд░ рд╕реЗрд╡рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП QBuilder.AppLauncher рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ
- рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ, рд╕реЗрд╡рд╛ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ: рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдХрд░реЗрдВ: 8000 / QBuilderAppLaaer / рд╕реЗрд╡рд╛
- рдирд╛рдо рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ: AppLauncherServiceред
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рд╕реЗрд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдХрддрд╛рд░ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдВ
QBuilder.AppQueue рдХреЗ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ, QBuildRecord рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ:
CXmlQueue рдХрддрд╛рд░ рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ CXmlQueue.cs рд╡рд░реНрдЧ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ XML рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреА:
- CXmlQueue рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ - рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд╛рдо рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдХрддрд╛рд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред
- SetCurrentBuild - рдХрддрд╛рд░ XML рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдРрд╕рд╛ рддрддреНрд╡ рд╣реИ рдЬреЛ рдХрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- GetCurrentBuild - рдХрддрд╛рд░ XML рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- ClearCurrentBuild - рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рдХрддрд╛рд░ XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддрд╛ рд╣реИред
- OpenXmlQueue - XML тАЛтАЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдЬрд╣рд╛рдВ рдХрддрд╛рд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдЧреБрдо рд╣реИ, рддреЛ рдПрдХ рдирдпрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- GetLastQueueBuildNumber - рдХрддрд╛рд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рд▓реНрдб рдХрд╛ рдЕрдкрдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЙрд╕рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рд░реВрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред
- IncrementLastQueueBuildNumber - рдПрдХ рдирдИ рдмрд┐рд▓реНрдб рдХреЛ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдХрд░рддреЗ рд╕рдордп рдмрд┐рд▓реНрдб рдирдВрдмрд░ рдХрд╛ рдорд╛рди рдмрдврд╝рд╛рддрд╛ рд╣реИред
- GetCurrentQueue - рдХрддрд╛рд░ XML рдлрд╝рд╛рдЗрд▓ рд╕реЗ QBuildRecord рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдореВрд▓ рдХреЛрдб рдореЗрдВ, рдЗрди рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ CXmlQueue рдмрдирд╛рдпрд╛ред рд╡рд░реНрдЧ рдирд╛рдо рд╕реНрдерд╛рди QBuilder.AppQueue рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; using System.Xml.XPath; using System.IO; namespace QBuilder.AppQueue { . . . }
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред CXmlQueue рд╡рд░реНрдЧ рд╣реА:
рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реНрдкреЙрдЗрд▓рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрддрд╛рд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
<?xml version="1.0" encoding="utf-8"?> <BuildsQueue BuildNumber="23"> <build BuildId="14" IssueId="26086" IssueName="TestIssueName" StartDate="2018-06-13T16:49:50.515238+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="15" IssueId="59559" IssueName="TestIssueName" StartDate="2018-06-13T16:49:50.6880927+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="16" IssueId="45275" IssueName="TestIssueName" StartDate="2018-06-13T16:49:50.859937+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="17" IssueId="30990" IssueName="TestIssueName" StartDate="2018-06-13T16:49:51.0321322+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="18" IssueId="16706" IssueName="TestIssueName" StartDate="2018-06-13T16:49:51.2009904+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="19" IssueId="66540" IssueName="TestIssueName" StartDate="2018-06-13T16:49:51.3581274+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="20" IssueId="68618" IssueName="TestIssueName" StartDate="2018-06-13T16:49:51.5087854+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="21" IssueId="18453" IssueName="TestIssueName" StartDate="2018-06-13T16:49:51.6713477+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="22" IssueId="68288" IssueName="TestIssueName" StartDate="2018-06-13T16:49:51.8277942+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="23" IssueId="89884" IssueName="TestIssueName" StartDate="2018-06-13T16:49:52.0151294+02:00" Build_CSharp="true" Build_Cpp="true" /> <currentbuild BuildId="13" IssueId="4491" StartDate="13.06.2018 16:53:16" /> </BuildsQueue>
рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде BuildQueue.xml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦреЗрдВред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдбреАрдмрдЧрд┐рдВрдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
AuxFunctions рдХреНрд▓рд╛рд╕ рдЬреЛрдбрд╝реЗрдВ
рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ, рдореИрдВ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реВрдВред рдЕрднреА рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, FormatParameters, рдЬреЛ рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдкрдг рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред AuxFunctions.cs рдлрд╝рд╛рдЗрд▓ рдХреА рд╕реВрдЪреА:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace QBuilder.AppQueue { class AuxFunctions {
рд╕реЗрд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ
рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рд░реЛрд╣ TestConnection рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрддрд╛рд░ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- PushBuild (QBuildRecord): рд╢реВрдиреНрдпред рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ QBuildRecord рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрддрд╛рд░ XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдирдпрд╛ рдорд╛рди рдЬреЛрдбрд╝рддрд╛ рд╣реИ
- TestPushBuild (): рд╢реВрдиреНрдпред рдпрд╣ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдХрддрд╛рд░ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
- PullBuild: QBuildRecordред рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрддрд╛рд░ XML рдлрд╝рд╛рдЗрд▓ рд╕реЗ QBuildRecord рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
public interface IAppQueue {
рд╣рдо AppQueueService рдореЗрдВ рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ: IAppQueue рд╡рд░реНрдЧ:
рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реНрдкреЙрдЗрд▓рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ public class AppQueueService : IAppQueue {
AppQueueWindowsService рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛: ServiceBase рд╡рд░реНрдЧ
рд╡рд░реНрдЧ рдирд┐рдХрд╛рдп рдореЗрдВ рдирдП рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:
AppQueueWindowsService () рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреЛрдбрд╝реЗрдВ, рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдХреНрд▓рд╛рд╕реЗрд╕ рд╢реБрд░реВ рдХрд░реЗрдВ:
AgentTimeout - рдЯрд╛рдЗрдорд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрд╡реГрддреНрддрд┐ред рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рдкреНрд░реЗрд░рд┐рддред рдпрд╣рд╛рдВ рд╣рдордиреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдорд░ рдХреЛ рд╣рд░ 30 рд╕реЗрдХрдВрдб рдореЗрдВ рдЖрдЧ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореВрд▓ рдореЗрдВ, рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИред рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рд╡рд░реНрдЧ рдореЗрдВ рдЪрд▓ рд░рд╣реА рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ:
рдЯрд╛рдЗрдорд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝реЗрдВ:
private void TimerTick(object sender, System.Timers.ElapsedEventArgs e) { try {
рд╣рдо OnStart рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ, рдЯрд╛рдЗрдорд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦреЗрдВ
рдпрд╣рд╛рдБ рдЕрдм рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using System.ServiceModel; using System.ServiceProcess; using System.Configuration; using System.Configuration.Install; using System.Reflection; using System.Xml.Linq; using System.Xml.XPath; using QBuilder.AppQueue.AppLauncherService;
App.config рдореЗрдВ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝реЗрдВ
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯ рдЬреЛрдбрд╝реЗрдВ: <appSettings> <add key="QueueFileName" value="BuildQueue.xml"/> <add key="BuildToolPath" value="c:\temp\dummybuild.exe"/> <add key="BuildToolWorkDir" value="c:\temp\"/> <add key="LocalDomain" value="."/> <add key="UserName" value="username"/> <add key="ScriptPath" value="C:\Temp\BuildSample.bld"/> </appSettings>
рд╕реЗрд╡рд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ
- QBuilder.AppLauncher.zip рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдкреИрдХ рдХрд░реЗрдВред рд╡рд╣ рдФрд░ рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ ред
- рджреНрд╡реИрдд рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЕрдВрджрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ dummybuild.exe рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, c: \ temp рдореЗрдВред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕реНрдЯрдм рд╣реИ рдФрд░ рдмрд╕ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реЗрд╡рд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднрд┐рдиреНрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ BuildToolPath рдФрд░ BuildToolWorkDir рдкреИрд░рд╛рдореАрдЯрд░ рдмрджрд▓рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
- \ QBuilder.AppLauncher \ binaries \ QBuilder.AppLauncher \ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдореЛрдб рдореЗрдВ QBuilder.AppLauncher.exe рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБред рдЖрдк рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рд╕реНрд░реЛрдд рд╕реЗ рднреА рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рд╣рдо рдкреНрд░рд╢рд╛рд╕рдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде QBuilder.AppQueue.exe / рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рд╕реЗрд╡рд╛ рдХрд╛ рдХрдВрд╕реЛрд▓ рд╕рдВрд╕реНрдХрд░рдг рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВред
- рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ:

- рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ 30 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдирд┐рдореНрди рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

- BuildQueue.xml рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХрддрд╛рд░ рдХреИрд╕реЗ рдШрдЯрддреА рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдореВрд▓реНрдп:
<?xml version="1.0" encoding="utf-8"?> <BuildsQueue BuildNumber="23"> <build BuildId="19" IssueId="66540" IssueName="TestIssueName" StartDate="2018-06-13T16:49:51.3581274+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="20" IssueId="68618" IssueName="TestIssueName" StartDate="2018-06-13T16:49:51.5087854+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="21" IssueId="18453" IssueName="TestIssueName" StartDate="2018-06-13T16:49:51.6713477+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="22" IssueId="68288" IssueName="TestIssueName" StartDate="2018-06-13T16:49:51.8277942+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="23" IssueId="89884" IssueName="TestIssueName" StartDate="2018-06-13T16:49:52.0151294+02:00" Build_CSharp="true" Build_Cpp="true" /> <currentbuild BuildId="18" IssueId="16706" StartDate="13.06.2018 23:20:06" /> </BuildsQueue>
- рдбрдореА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдкрди рдХреЗ рдмрд╛рдж, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЕрдВрдд рдирдХрд▓реА рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдХрддрд╛рд░ рдореЗрдВ рдЕрдЧрд▓рд╛ рддрддреНрд╡ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
<?xml version="1.0" encoding="utf-8"?> <BuildsQueue BuildNumber="23"> <build BuildId="21" IssueId="18453" IssueName="TestIssueName" StartDate="2018-06-13T16:49:51.6713477+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="22" IssueId="68288" IssueName="TestIssueName" StartDate="2018-06-13T16:49:51.8277942+02:00" Build_CSharp="true" Build_Cpp="true" /> <build BuildId="23" IssueId="89884" IssueName="TestIssueName" StartDate="2018-06-13T16:49:52.0151294+02:00" Build_CSharp="true" Build_Cpp="true" /> <currentbuild BuildId="20" IssueId="68618" StartDate="13.06.2018 23:24:25" /> </BuildsQueue>
рд▓рд╛рдЗрди рдЪрд▓ рд░рд╣реА рд╣реИ!рдкрд░рд┐рдгрд╛рдо
рд▓реИрдВрдбрдлрд┐рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдП рдЧрдП рд╢рдХреНрддрд┐рдпрд╛рдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ред рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ C # рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдпрдореЛрдВ - рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╕реЗрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдирдИ рд╣реИрд╢рд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдХрд╛рд░рдг, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреЗрд╡рд▓ рдирд╛рдо рдФрд░ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЪрдпрди рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ - рдпрд╣ рддрдм рдЙрддреНрдкрдиреНрди рд╣реБрдИ рдЬрдм рдПрдХ рд╣реА рдирд╛рдо рдФрд░ рдЖрдХрд╛рд░ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рднрд┐рдиреНрди рдереАрдВред рдирдпрд╛ рдЕрдкрдбреЗрдЯ рдмрд┐рд▓реНрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирддрд╛ рд╣реИ - рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдПрдордбреА 5 рд╣реИрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдЯ рдХрд╛ рдЕрдкрдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрд╢ рд╣реЛрддрд╛ рд╣реИред
рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЬреЛ рд╣рдо рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВрдорд╛рдореВрд▓реА рд╕реБрдзрд╛рд░ рд▓рдЧрд╛рддрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ - рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рд╣рдореЗрдВ рдорд╛рдирд╡ рдХрд╛рд░рдХ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдФрд░ рдЦреБрдж рдХреЛ рдмреИрд╕рд╛рдЦреА рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреАред рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдЗрддрдиреА рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛ рдЧрдИ рдХрд┐ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЙрдЯрдлрд╝рд┐рдХреНрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд╣рд╛рдБ рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ рд╕рдм рдПрдХ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛редрдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдПрдХреНрд╕рдПрдордПрд▓ рдХреЗ рд╕рд╛рде рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде, рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЕрдм рдореЗрд░реЗ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдореИрдВ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рд╣рдЯрд╛ рджрд┐рдпрд╛, рдЬреЛ рд╕рд╛рд░ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЧрдВрднреАрд░ рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИредрдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдбрдмреНрд▓реНрдпреВрд╕реАрдПрдл рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдЯрд╛рдЗрдорд░ рдХреЗ рд╕рд╛рде, рдФрд░ рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрддрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВред рдЖрдк рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдХрддрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:рдкреАрдПрд╕ рдореИрдВ рд╡рд┐рдХреНрдЯрд░ рдмреЛрд░реЛрдбрд┐рдЪ рдХреЗ рдкреНрд░рддрд┐ рдЕрдкрдирд╛ рдЖрднрд╛рд░ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рдирдХреА рд╕рд▓рд╛рд╣ рдиреЗ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХреАред рд╡рд┐рдХреНрдЯрд░ рд╕рд╛рдмрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдЬреВрдирд┐рдпрд░реНрд╕ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдж рдореЗрдВ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрдврд╝ рдЬрд╛рдПрдЧреАред