hrz_sv / 01.Manager / 00.Program / Manager / Process_Cmd.cs
이력 | 보기 | 이력해설 | 다운로드 (5.21 KB)
1 | 37 | HKM | using System; |
---|---|---|---|
2 | using System.Collections.Generic; |
||
3 | using System.Diagnostics; |
||
4 | using System.Linq; |
||
5 | using System.Text; |
||
6 | using System.Threading.Tasks; |
||
7 | using System.Windows.Forms; |
||
8 | |||
9 | namespace Manager |
||
10 | { |
||
11 | public class Process_Cmd |
||
12 | { |
||
13 | #region [ Variable ] |
||
14 | |||
15 | ProcessStartInfo procInfo; |
||
16 | |||
17 | Process process; |
||
18 | |||
19 | public bool isProcessAlive = false; |
||
20 | |||
21 | /// <summary> |
||
22 | /// 결과를 출력할 리스트 박스 |
||
23 | /// </summary> |
||
24 | ListBox resultListBox; |
||
25 | |||
26 | #endregion |
||
27 | |||
28 | public void SetListBox(ListBox inputListbox_) |
||
29 | { |
||
30 | resultListBox = inputListbox_; |
||
31 | } |
||
32 | |||
33 | |||
34 | public Process_Cmd() |
||
35 | { |
||
36 | procInfo = new ProcessStartInfo(); |
||
37 | } |
||
38 | |||
39 | void CreateProcess() |
||
40 | { |
||
41 | process = new Process(); |
||
42 | process.StartInfo = procInfo; |
||
43 | process.EnableRaisingEvents = true; // 이벤트가 발생하게 해준다. |
||
44 | process.Exited += new EventHandler(Process_Exited); // Process 가 끝날때의 이벤트 |
||
45 | process.OutputDataReceived += new DataReceivedEventHandler(OutputDataReceive_Handler); |
||
46 | |||
47 | } |
||
48 | |||
49 | /// <summary> |
||
50 | /// Process 의 정보 값들을 초기화 해줍니다. |
||
51 | /// </summary> |
||
52 | /// <param name="inputPath_"></param> |
||
53 | /// <param name="inputArguments_"></param> |
||
54 | public void SetProcess(string inputPath_, string inputArguments_) |
||
55 | { |
||
56 | procInfo.FileName = inputPath_; // 프로그램 경로 |
||
57 | procInfo.Arguments = inputArguments_; // 매개변수의 경로 |
||
58 | |||
59 | procInfo.WindowStyle = ProcessWindowStyle.Hidden; // cmd창이 숨겨지도록 하기 |
||
60 | procInfo.CreateNoWindow = true; // cmd창을 띄우지 안도록 하기 |
||
61 | |||
62 | procInfo.UseShellExecute = false; |
||
63 | procInfo.RedirectStandardOutput = true; // cmd창에서 데이터를 가져오기 |
||
64 | procInfo.RedirectStandardInput = true; // cmd창으로 데이터 보내기 |
||
65 | procInfo.RedirectStandardError = true; // cmd창에서 오류 내용 가져오기 |
||
66 | |||
67 | } |
||
68 | |||
69 | /// <summary> |
||
70 | /// 프로세스가 시작됩니다. |
||
71 | /// </summary> |
||
72 | public void StartProcess() |
||
73 | { |
||
74 | try |
||
75 | { |
||
76 | if(process == null) |
||
77 | { |
||
78 | CreateProcess(); |
||
79 | } |
||
80 | |||
81 | process.Start(); // Process가 시작된다. |
||
82 | |||
83 | process.BeginOutputReadLine(); // output 되는 라인들을 잡아오기 시작한다. |
||
84 | |||
85 | isProcessAlive = true; |
||
86 | } |
||
87 | catch (Exception e) |
||
88 | { |
||
89 | Console.WriteLine(e.ToString()); |
||
90 | } |
||
91 | } |
||
92 | |||
93 | /// <summary> |
||
94 | /// 프로세스에 메시지를 보냅니다. |
||
95 | /// </summary> |
||
96 | /// <param name="inputString_"></param> |
||
97 | public void Msg(string inputString_) |
||
98 | { |
||
99 | if (process.HasExited == true) |
||
100 | process.Start(); |
||
101 | |||
102 | process.StandardInput.Write(@inputString_ + Environment.NewLine); |
||
103 | |||
104 | // 명령어를 보낼때는 꼭 마무리를 해줘야 한다. 그래서 마지막에 NewLine가 필요하다 |
||
105 | //process.StandardInput.Close(); |
||
106 | |||
107 | //string result = process.StandardOutput.ReadToEnd(); |
||
108 | //StringBuilder sb = new StringBuilder(); |
||
109 | //sb.Append("[Result Info]" + DateTime.Now + "\r\n"); |
||
110 | //sb.Append(result); |
||
111 | //sb.Append("\r\n"); |
||
112 | |||
113 | //textBox1.Text = sb.ToString(); |
||
114 | |||
115 | //Form_Manager.instance.Label_Result_Modify(sb.ToString()); |
||
116 | |||
117 | //process.WaitForExit(); |
||
118 | //process.Close(); |
||
119 | } |
||
120 | |||
121 | /// <summary> |
||
122 | /// 프로세스가 종료됩니다. |
||
123 | /// </summary> |
||
124 | public void ExitProcess() |
||
125 | { |
||
126 | process.CancelOutputRead(); |
||
127 | |||
128 | process.Kill(); |
||
129 | |||
130 | |||
131 | //process.StandardInput.Close(); |
||
132 | //process.WaitForExit(); |
||
133 | //process.Close(); |
||
134 | } |
||
135 | |||
136 | /// <summary> |
||
137 | /// 프로세스가 꺼진 상황의 이벤트 입니다. |
||
138 | /// </summary> |
||
139 | /// <param name="sender"></param> |
||
140 | /// <param name="e"></param> |
||
141 | private void Process_Exited(object sender, EventArgs e) |
||
142 | { |
||
143 | Console.WriteLine("process_exited"); |
||
144 | |||
145 | isProcessAlive = false; |
||
146 | } |
||
147 | |||
148 | /// <summary> |
||
149 | /// process 에서 출력되는 string 들을 list box에 출력해주는 함수. |
||
150 | /// </summary> |
||
151 | /// <param name="sender"></param> |
||
152 | /// <param name="e"></param> |
||
153 | private void OutputDataReceive_Handler(object sender, DataReceivedEventArgs e) |
||
154 | { |
||
155 | if (resultListBox == null) |
||
156 | return; |
||
157 | |||
158 | resultListBox.Invoke(new Action(() => |
||
159 | { |
||
160 | if (e.Data == null) |
||
161 | return; |
||
162 | |||
163 | resultListBox.Items.Add(e.Data); |
||
164 | })); |
||
165 | } |
||
166 | } |
||
167 | } |