
CSharpCodeProvider рд╡рд░реНрдЧ C # рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ C # рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди "рдХреНрдпреЛрдВ" рд╣реИ рдЖрдо рдЬрд╡рд╛рдм:
- ideone.com рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди,
- "рдареАрдХ рд╣реИ, рддреБрдо рдХрднреА рдкрддрд╛ рдирд╣реАрдВ рдХреНрдпреЛрдВ," рдФрд░
- "рдФрд░ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИ"
рдЖрдЬ рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рджреМрдбрд╝ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реИ, рдЬреЛ
рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ
рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рджрд┐рдпрд╛
рдЧрдпрд╛ рд╣реИ:
Process process = тАж; process.Run(); //blahblahblah if (!process.WaitForExit(sometime)) { process.Kill(); }
рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ WaitForExit () рд╕реЗ рд▓реМрдЯрдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд▓ () рдХреЗ рдореВрд▓ рдХрд╛рд░реНрдп рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдмрд╛рдж рдореЗрдВ "рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ InvalidOperationException рдлреЗрдВрдХрддрд╛ рд╣реИ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рд▓реЗ рд╣реА рдкреВрд░реА рд╣реЛ рдЪреБрдХреА рд╣реИред"
рд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрднреА-рдХрднреА рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рддрд┐ рд╣реИред
рдЗрд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рд▓ () рдХрд╛ "рд╕рд╣реА" рд╡реНрдпрд╡рд╣рд╛рд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ)ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдореЗрдВ рджреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рдордЬрд╝рдмреВрддреА рд╕реЗ рджреМрдбрд╝ рдХреЗ рдРрд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ "рдЧрд▓рдд" рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИред
рдкрд╣рд▓реА (рдЕрдЧреНрд░рдгреА) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧреА:
var process = new Process(); process.StartInfo.FileName = secondExeName; process.Start(); if (!process.WaitForExit(900)) { System.Threading.Thread.Sleep(500); process.Kill(); }
рджреВрд╕рд░рд╛ (рджрд╛рд╕) - рдпрд╣ рдХреЛрдб:
System.Threading.Thread.Sleep( 1000 );
рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рджреМрдбрд╝ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рдФрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреА рдУрд░ рдмрдврд╝реЗред
рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ
рд▓рд┐рдП рдореЙрдирд┐рдЯрд░ рдХреЛ
рдЬрдХрдбрд╝рдирд╛ рд╣реИ рдЬреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред
рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛:
- рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреИрд╕реА рджреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдВ,
- рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЖрджреЗрд╢ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ,
- рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреНрд░рдореБрдЦ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЪреБрдиреЗрдВ,
- рджрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рд▓рд┐рдЦреЗрдВ ...
TL, DR; рд╡реИрд╕реЗ рднреА, рдЬреЛ рд╕рдорд╛рдзрд╛рди рдЦреЛрд▓рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЧрд▓рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╛ рддреЛ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рдж рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдЦреЛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдЦреБрд▓реА рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕реЗ "рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ"ред рднрд▓реЗ рд╣реА рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╛рди рд╣реЛ, рд▓реЗрдХрд┐рди рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЦреЛрд▓рдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдВрд╡реЗрджрдирд╣реАрди рдЕрднреНрдпрд╛рд╕ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдЦреБрд╢реА рдирд╣реАрдВ рдмрдврд╝рд╛рдПрдЧрд╛ рдЬреЛ рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдПрдВрдЧреЗ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрд╕реА рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЦреЛрд▓рдирд╛ рд╣реЛрдЧрд╛) рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ)ред рдЕрдВрдд рдореЗрдВ, рд╕рдВрдЧреНрд░рд╣ рдХреА рдХреБрдЫ рджрд░реНрдЬрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЦреЛрд▓рдиреЗ рдХреА рдорд╛рдВрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╣реА рдирд┐рдВрджрдиреАрдп рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕реЗ рдХреЛрдб рдХреЗ рдПрдХ рд╕рдВрдХрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рджреМрдбрд╝ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред
using System; using System.Linq; using Microsoft.CSharp; using System.CodeDom.Compiler; using System.Diagnostics; namespace ConsoleApplicationNPlusOne { class Program { static void Main(string[] args) { var secondExecutableName = "GuidedProcess.png"; compileGuidedExecutable(secondExecutableName); using (var guidedProcess = new Process()) { guidedProcess.StartInfo.FileName = secondExecutableName; guidedProcess.StartInfo.UseShellExecute = false; guidedProcess.Start(); if (!guidedProcess.WaitForExit(900)) { System.Threading.Thread.Sleep(500); guidedProcess.Kill(); } } } static void compileGuidedExecutable(string filePath) { using (var compiler = new CSharpCodeProvider()) { var parameters = new CompilerParameters(null, filePath, true); parameters.GenerateExecutable = true; var compilationResult = compiler.CompileAssemblyFromSource( parameters, guidedProcessCode); var compilationErrors = compilationResult.Errors; if (compilationErrors.HasErrors) { var firstError = compilationErrors.Cast<CompilerError>().First(); throw new InvalidOperationException(String.Format( "Compilation failed. Line {0}: {1}", firstError.Line, firstError.ErrorText)); } } } static readonly String guidedProcessCode = @"class Program { public static void Main(string[] args) { System.Threading.Thread.Sleep( 1000 ); } }"; } }
рджреЛрдиреЛрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдХреЛрдб рдХреЛ рдмрдбрд╝реЗ рдХрд░реАрдиреЗ рд╕реЗ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рд┐рд░реНрдл рдмрдирд╛рдП рдЧрдП рдЦрд╛рд▓реА рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓реАрдХреЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ F5 рджрдмрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ CSharpCodeProvider рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдХреЛрдб рд╕реЗ рдХреЛрдб рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдерд╛ред
рджрд┐рдорд┐рддреНрд░реА рдореЗрд╢реНрдЪреЗрд░реАрдХреЛрд╡,
рдбреЗрд╡рд▓рдкрд░ рдЙрддреНрдкрд╛рдж рд╡рд┐рднрд╛рдЧ