이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 22992|회답: 2

[출처] 한 인스턴스만 실행할 수 있는 C# 프로그램 문제를 해결하는 여러 방법에 대한 상세한 설명

[링크 복사]
게시됨 2016. 12. 8. 오후 1:11:13 | | |

방법 1:
스레드 뮤텍스 변수를 사용하세요. 인스턴스가 실행 중인지 여부를 판단하기 위해 뮤텍스 변수를 정의하세요.
program.cs 파일의 Main() 함수를 다음 코드로 변경하세요:




참고: 프로그램에서 System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); 뮤텍스 변수 런을 생성하기 위해 "single_test"는 뮤텍스 이름이며, 이 메서드가 반환될 때 로컬 뮤텍스나 지정된 명명 시스템 뮤텍스가 생성되면 불리언 값 런원이 참이 됩니다; 지정된 명명 시스템 뮤텍스가 이미 존재하면 false입니다. 이름 있는 뮤텍스는 시스템 전반에 걸쳐 사용됩니다.
방법 2: 프로세스를 판단하는 방식을 사용하고, 프로그램을 실행하기 전에 같은 이름의 프로세스가 있는지 확인하고, 실행 위치도 동일한지 확인합니다. C#의 System.Diagnostics 네임스페이스에서 Process 클래스를 적용하여 구현하면, 주요 코드는 다음과 같습니다:
1. 다음과 같이 program.cs 파일에 함수를 추가하세요:




2. 메인 () 함수를 다음 코드로 변경합니다:




방법 3: 전역 원자 방법: 프로그램을 만들기 전에 먼저 전역 원자 테이블에서 특정 원자 A(생성 시 추가됨)가 있는지 확인하고, 생성이 있으면 생성을 멈추는 것을 의미합니다. 이는 프로그램이 인스턴스를 실행했음을 나타냅니다; 만약 존재하지 않는다면, 프로그램을 실행하고 특정 원자 A를 전역 원자 테이블에 추가하고 싶습니다; 프로그램을 종료할 때는 특정 원자 A를 반드시 해제해야 하며, 그렇지 않으면 컴퓨터가 꺼질 때까지 방출되지 않습니다. C# 구현은 다음과 같습니다:
1. WinAPI 함수 인터페이스 선언

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalAddAtom(String lpString); 원자 추가하기
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalFindAtom(String lpString); 원자 찾기
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalDeleteAtom(UInt32 nAtom); 원자 삭제
2. Main() 함수를 다음과 같이 수정합니다:




3. FormClosed 이벤트에 다음 코드를 추가하세요:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); 원자 "jiaao_test" 삭제
--------------------------------------*-------*--------*-----------------------------------------------
위의 내용은 상호 배타적인 프로그램을 만드는 기본 아이디어이며, 개인적으로 첫 번째 방법이 가장 간단하다고 생각합니다.




이전의:Directory.GetCurrentDirectory와 Application.StartupPath의 차이점
다음:.Net Framework4와 .Net Framework4.0 클라이언트 프로필의 차이점
게시됨 2017. 7. 10. 오전 6:31:21 |
공유해 주셔서 감사합니다
 집주인| 게시됨 2024. 7. 23. 오후 2:21:04 |
C# 프로그램은 올바른 코드를 실행하는 인스턴스가 하나만 허용합니다
https://www.itsvse.com/thread-3391-1-1.html
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com