C#ProcessStartInfo始终运行重复的进程

时间:2016-07-28 12:52:40

标签: c#

我有一些代码来打开cmd并运行命令然后获取输出,但它总是运行两次,有时输出丢失。

enter image description here

这是我的代码,我多次重新检查,但无法找出原因。

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();
        }
    }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

因为您两次致电Process.Start()。在此处创建实例process时:

Process process = Process.Start(startInfo);

再次在这里,靠近构造函数的底部:

process.Start();