C\#CMD 명령 을 실행 하고 결 과 를 되 돌려 주 는 동작 방식

최근 작업 을 하 던 중 소프트웨어 에서 ARP 표를 조회 해 특정 IP 에 대응 하 는 ARP 항목 을 조회 할 때 확률 적 으로 조회 되 는 ARP 항목 이 비어 있 는 것 을 발견 했다.처음에는 핑 통 을 의 심 했 지만 ARP 를 배우 지 못 했다.
나중에 생각해 보 니 이것 은 불가능 합 니 다.마지막 으로 여러 가지 분석 을 통 해 소프트웨어 에서 ARP 를 제거 하 는 작업 은 Kernel.dll 의 WinExec 를 호출 하여 이 루어 진 것 입 니 다.이 함 수 는 호출 이 성공 하면 되 돌아 가 고 호출 된 프로그램 이 실 행 될 때 까지 기다 리 지 않 습 니 다.
그래서 어떤 반응 이 둔 한 컴퓨터 에 서 는 ARP,Ping 을 제거 하고 ARP 를 조회 하 는 순서 가 있 으 면 Ping 이 끝 난 후에 ARP 표 가 삭제 되 어 ARP 항목 을 찾 지 못 할 수도 있 습 니 다.
인터넷 에서 C\#호출 프로그램 을 조회 하고 프로그램 이 실 행 될 때 까지 기 다 렸 다가 돌아 오 는 실현 방법 은 다음 과 같다.
1.도입

using System.Diagnostics;  
2.실행 CMD 만 들 기

Process CmdProcess = new Process();  
CmdProcess.StartInfo.FileName = "cmd.exe";    
3.설정 개발 방식 입 출력 오류

CmdProcess.StartInfo.CreateNoWindow = true;         //           
CmdProcess.StartInfo.UseShellExecute = false;       //   shell      
CmdProcess.StartInfo.RedirectStandardInput = true;  //          
CmdProcess.StartInfo.RedirectStandardOutput = true; //            
CmdProcess.StartInfo.RedirectStandardError = true;  //          
4.cmd 를 실행 하고 반환 값 가 져 오기
방법 1

CmdProcess.StartInfo.Arguments = "/c " + "=====cmd  ======";//“/C”              
CmdProcess.Start();//   
CmdProcess.StandardOutput.ReadToEnd();//        
CmdProcess.WaitForExit();//              
CmdProcess.Close();//   
방법 2

CmdProcess.StandardInput.WriteLine(str + "&exit"); // cmd          
CmdProcess.StandardInput.AutoFlush = true;  //    
CmdProcess.Start();//     
CmdProcess.StandardOutput.ReadToEnd();//     
CmdProcess.WaitForExit();//              
CmdProcess.Close();//    
5.출력 반환 값
우선 도입

using System.IO;
 
            StreamReader sr =CmdProcess.StandardOutput;//      
            string line = ""; 
            int num = 1;
            while ((line=sr.ReadLine())!=null)
            {   
                if(line!="")
                {
                    Console.WriteLine(line + " " + num++);
                }
            }
6.Process 의 HasExited 속성

    //           
    CmdProcess.WaitForExit();
 
    //              true(           ,HasExited      true) 
     falg = CmdProcess.HasExited; 
추가:C\#동적 호출 exe 실행 가능 한 프로그램 및 반환 값
코드 보 세 요~

        static void Main(string[] args)
        {
            object output;
            try
            {
                using (Process p = new Process())
                {
                    p.StartInfo.FileName = @"ConsoleApp2.exe";//       
                    p.StartInfo.Arguments = "";//       ,        ,    ""
                    p.StartInfo.UseShellExecute = false;//        shell  
                    p.StartInfo.CreateNoWindow = true;//       
                    p.StartInfo.RedirectStandardOutput = true;//           
                    p.StartInfo.RedirectStandardInput = true;   //             
                    p.StartInfo.RedirectStandardError = true;   //         
                    p.Start();
                    p.WaitForExit();
                    //           0
                    if (p.ExitCode != 0)
                    {
                        output = p.StandardError.ReadToEnd();
                        output = output.ToString().Replace(System.Environment.NewLine, string.Empty);
                        output = output.ToString().Replace("
", string.Empty); throw new Exception(output.ToString()); } else { output = p.StandardOutput.ReadToEnd(); } } Console.WriteLine(output); } catch (Exception ee) { Console.WriteLine(ee.Message); } Console.ReadKey(); }
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기