2009-06-05 7 views
1

C# 콘솔 앱을 작성 중입니다. 예약 된 작업으로 실행됩니다.내 프로그램이 Windows에서 실행 중인지 확인하는 방법은 무엇입니까?

다른 프로세스가 이전 일정 작업 실행에서 계속 실행중인 경우 EXE를 빨리 종료하고 싶습니다.

내 응용 프로그램이 활성 프로세스를 감지하고 이미 실행 중인지 여부를 알 수있는 방법을 찾지 못하는 것 같습니다.

어떤 아이디어 주셔서 감사합니다. Peter

+0

http://www.sanity-free.org/143 /csharp_dotnet_single_instance_application.html –

답변

12

하나의 일반적인 기술은 프로세스가 시작될 때 뮤텍스를 만드는 것입니다. 뮤텍스를 만들 수 없다면 실행중인 다른 인스턴스가 있음을 의미합니다.

//Declare a static Mutex in the main form or class... 
private static Mutex _AppMutex = new Mutex(false, "MYAPP"); 

// Check the mutex before starting up another possible instance 
[STAThread] 
static void Main(string[] args) 
{ 
    if (MyForm._AppMutex.WaitOne(0, false)) 
    { 
    Application.Run(new MyForm()); 
    } 
    else 
    { 
    MessageBox.Show("Application Already Running"); 
    } 
    Application.Exit(); 
} 
+0

여기 링크가 있습니다. 아마도 tekBlues가 코드 샘플을 사용하여 답변을 업데이트 할 수 있습니다. http://www.programmersheaven.com/mb/csharp/209938/209938/how-can-i-check-if-my-application-is-already-running/?S=B20000 참고 : 테스트하지 않았습니다. 견본. –

+1

뮤텍스는 프로세스를 검사 할 수있는 권한이 없기 때문에 프로세스를 검사하는 것보다 더 나은 옵션이지만, 뮤텍스가있는 것에 대해서는 걱정할 필요가 없습니다 –

+0

이렇게하려면 100 % 귀하의 애플 리케이션이 잠글 수 없다면, 그렇지 않으면 자신이 DOS'ing 결국거야 –

0

프로세스를 확인하는 System.Diagnostics 네임에 뭔가가되지 않습니다

이 나단의 링크에서 샘플은?

편집 :이 링크들 중 어떤 것이 도움이 되나요? 어떻게 유용한 지 알 수 있습니다.

  • How to check if an application is running
  • Looping through all processes on the system
  • 내가 할 수있는 모든 당신에게 다른 항목에 대한 링크를 제공하는 것을 미안 해요

      . 필자는 System.Diagnostics를 사용해 본 적이 없지만 여러분이나 다른 누군가를 도울 수 있기를 바랍니다.

    1

    이 System.Diagnostics.Process가

    getProcesses()

    1

    사용 뮤텍스를 시도 :

    // Allow only one instance of app 
    // See http://www.yoda.arachsys.com/csharp/faq/#one.application.instance 
    bool firstInstance; 
    _mutex = new Mutex(false, "Local\\[UniqueName]", out firstInstance); 
    

    Link to reference in comment

    +0

    고마워, 그게 아주 간단했다! (이 시점에서 내가 다룰 수있는 모든 것) –

    관련 문제