I have a bit of code to open cmd and run the command then get the output, but it's always running twice times, and sometimes output are missing.
Here is my code, I re-check many times but can't figure out what the cause.
using System; using System.Diagnostics; using System.IO; using System.Security.Cryptography; using System.Security.Permissions; using System.Text; using System.Threading; namespace CommandHandler { class Program { public static string change_file = AppDomain.CurrentDomain.BaseDirectory + @"change\change.txt"; public static void Main() { //Console.SetWindowSize(Console.LargestWindowWidth, Console.LargestWindowHeight); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.Green; //ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/c php d:/test.php") ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/c D:\\php64\\php D:\\xampp\\htdocs\\xxx\\bin\\listen.php") { WindowStyle = ProcessWindowStyle.Hidden, UseShellExecute = false, RedirectStandardOutput = true, CreateNoWindow = true }; Process process = Process.Start(startInfo); //process.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_OutputDataReceived); process.OutputDataReceived += new DataReceivedEventHandler((sender, e) => { // Prepend line numbers to each line of the output. if (!String.IsNullOrEmpty(e.Data)) { String value = e.Data.ToLower(); Console.WriteLine(e.Data); if (value.Contains("php fatal error:")) { string hash = md5(DateTime.Now.ToString()); System.IO.File.WriteAllText(change_file, hash); } } }); process.BeginOutputReadLine(); process.Start(); process.WaitForExit(); Console.ReadKey(); } public static byte[] encryptData(string data) { System.Security.Cryptography.MD5CryptoServiceProvider md5Hasher = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] hashedBytes; System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding(); hashedBytes = md5Hasher.ComputeHash(encoder.GetBytes(data)); return hashedBytes; } public static string md5(string data) { return BitConverter.ToString(encryptData(data)).Replace("-", "").ToLower(); } } } Any idea?
