C# - Process
실행중인 프로세스트의 디렉토리 위치
string 현재위치 = Environment.CurrentDirectory;
다른 프로세스 실행
System.Diagnostics.Process.Start("실행파일경로\실행파일명.exe",파라메터)
System.Diagnostics.Process.Start("cmd.exe 명령어");
- C# - 배치 파일 실행하고 출력 결과를 얻는 방법
- http://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&detail=1&pageno=0&wid=1810&rssMode=1&wtype=0
프로세스 종료
System.Diagnostics.Close(); // 프로세스의 리소스를 해재(종료) 시킨다.
System.Diagnostics.CloseMainWindow(); // UI가 있는 프로세스에 메시지를 보내 종료 시킨다.
System.Diagnostics.Kill(); // 즉시 프로세스를 종료시킨다.
프로세스 실행 후 종료까지 대기
System.Diagnostics.Process p = System.Diagnostics.Process.Start("C:\\test.txt");
p.WaitForExit(); //혹은 시간으로 설정 가능 p.WaitForExit(10000);
프로세스 실행 후 종료를 비동기로 대기
private void button1_Click(object sender, System.EventArgs e)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "notepad.exe";
p.SynchronizingObject = this;
p.Exited += new EventHandler(p_Exited);
p.EnableRaisingEvents = true;
p.Start();
}
private void p_Exited(object sender, EventArgs e)
{
// 프로세스가 종료하면 이벤트 실행
}
실행중인 프로세스 찾기
var exeName = "cmd";
Process[] localByName = Process.GetProcessesByName("LoginServerr");
if (localByName.Length > 0)
{
return true;
}
프로세스 타이틀 이름으로 프로세스 찾기
var allprocess = Process.GetProcesses();
if (allprocess.Count() > 0)
{
foreach (var pro in allprocess)
{
if (pro.MainWindowTitle == "명령 프롬프트")
{
Console.WriteLine("{0} 타이틀 프로세스를 찾았음", "명령 프롬프트");
}
}
}
Win32 API의 SendMessage 사용
const int WM_COPYDATA = 0x4A;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);
Process[] AppServerProcess = Process.GetProcessesByName("LoginServer");
//.................
SendMessage(AppServerProcess[0].MainWindowHandle, WM_COPYDATA, IntPtr.Zero, iPtrForCdsMsg);
cpu, 메모리 체크
- wmi 사용 http://www.codeproject.com/csharp/wmi.asp
- 참고: http://code-life.net/?p=1846 , http://dobon.net/vb/dotnet/system/readperformancecounter.html
// 컴퓨터 전체의 cpu 사용률, 처음에는 0으로 나옴
PerformanceCounter objCPU = new PerformanceCounter("Processor", "% Processor Time","_Total");
label1.text = objCPU.NextValue();
// 특정 프로세스(test.exe)의 CPU 사용률
PerformanceCounter objCPU = new PerformanceCounter("Process", "% Processor Time", "test");
label1.text = objCPU.NextValue();
// 특정 프로세스(test.exe)의 프라이베트 메모리 사용 크기
PerformanceCounter objmemory = new PerformanceCounter("Process", "Working Set - Private", "test");
label1.text = objmemory.NextValue();
이 글은 2019-04-06에 작성되었습니다.