저는 Windows Forms 응용 프로그램에서 작업하고 있습니다. 다음 코드를 사용하여 버튼 클릭 이벤트에 대한 계산기 프로세스를 시작합니다.두 번 이상 실행중인 프로세스를 중지하는 방법
System.Diagnostics.Process.Start("calc.exe");
또 다른 계산기 프로세스가 시작됩니다. 그렇다면 프로세스가 두 번 이상 실행되지 않게하려면 어떻게해야합니까?
감사
저는 Windows Forms 응용 프로그램에서 작업하고 있습니다. 다음 코드를 사용하여 버튼 클릭 이벤트에 대한 계산기 프로세스를 시작합니다.두 번 이상 실행중인 프로세스를 중지하는 방법
System.Diagnostics.Process.Start("calc.exe");
또 다른 계산기 프로세스가 시작됩니다. 그렇다면 프로세스가 두 번 이상 실행되지 않게하려면 어떻게해야합니까?
감사
는 간단하게, 기능을 확인하십시오 :
if (!IsProcessOpen("calc"))
System.Diagnostics.Process.Start("calc.exe");
:이 과정을 확인하려는
public bool IsProcessOpen(string name)
{
foreach (Process process in Process.GetProcesses())
{
if (process.ProcessName.Contains(name))
{
return true;
}
}
return false;
}
지금이 기능을 사용
감사합니다 쉽고 완벽하게 작동하는 ygs – kapil
쉬운 ... 프로세스가 죽을 때까지 버튼을 비활성화합니다. 물론 어떤 종류의 논리를 넣을 수도 있습니다.
if(!myProcess.HasExited)
{
alert("You've already started the calculator app.");
}
else
{
// start the process
}
저는 개인적으로 전자를 좋아합니다. 그냥 이벤트 핸들러를 설정하고 설정 :
Process.EnableRaisingEvents = true;
이벤트 핸들러가 계산기 응용 프로그램이 종료 된 때 proggy 알려주 발생합니다, 그래서 버튼을 다시 활성화 할 수 있습니다.
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.enableraisingevents.aspx
try
{
myProcess.EnableRaisingEvents = true;
myProcess.Exited += new EventHandler(myProcess_Exited);
myProcess.Start();
// disable button
}
catch()
{
// enable button
}
private void myProcess_Exited(object sender, System.EventArgs e)
{
// enable button
}
당신은 Process.GetProcessesByName은() "CALC.EXE"라는 이름의 실행중인 프로세스를 검색하는 데 사용할 수 있습니다. 그러나 신뢰할 수는 없지만 프로세스 이름은 명확하지 않습니다. 동일한 .exe 이름으로 완전히 다른 프로세스가있을 수 있습니다.
좋은 방법은 프로세스를 시작하고 Process.Exited 이벤트로 프로세스를 추적하는 것입니다. 이처럼 : 어떤 프로세스가 실행중인 경우
Process calc;
private void button1_Click(object sender, EventArgs e) {
if (calc != null) return;
calc = new Process();
calc.StartInfo = new ProcessStartInfo("calc.exe");
calc.EnableRaisingEvents = true;
calc.Exited += new EventHandler(calc_Exited);
calc.SynchronizingObject = this;
calc.Start();
button1.Enabled = false;
}
void calc_Exited(object sender, EventArgs e) {
calc.Exited -= calc_Exited;
calc = null;
button1.Enabled = true;
}
일반적으로 이렇게하면 응용 프로그램의 첫 번째 인스턴스로 컨트롤을 전송하여 자신을 활성화 할 수 있습니다. 그렇지 않으면 응용 프로그램을 시작한 사람이 무슨 일이 일어나고 있는지 계속 알 수 없습니다.
당신은 뮤텍스를 생성하여이를 구현 할 수있을 때의 라인을 따라 응용 프로그램 출시, 상기에
bool mine = false;
Mutex mutex = new Mutex(true, "Something to identify this", out mine);
if (!mine)
// Application is already running
응용 프로그램이 2 번 실행하면, 뮤텍스가 이미 존재하고 다음 사용할 수 있습니다 sendMessage 첨부 초기 응용 프로그램을 활성화해야합니다.
이 작업의 예는 here입니다.
calc.exe의 실행중인 인스턴스를 확인할 수 있습니다.이 내용은 입니다. http://stackoverflow.com/questions/6392031/c-sharp-how-to-check-if-another-instance-of-the -application-is-running – yogi
세 가지 일반적인 방법이 있습니다. 요기가 지적한 뮤텍스, 크리스 게슬러가 암시 한 클로즈업을 기다리는 비동기식 이미 실행중인 프로세스에 대한 다른 검사는 calc.exe의 인스턴스를 찾을 수 있습니다. 적합하지 않을 수있는 다른 prgram에 의해 calc가 실행됩니다. –