를 생성 한 프로세스가 죽고 경우 뮤텍스를 취소 할 수있는 방법이 있나요?
상세 사항 :
나는 확인하기 위해 뮤텍스를 사용하는 내 응용 프로그램 실행의 한 인스턴스입니다.
자동 업데이트를 수행하기 위해 새로운 코드를 테스트하는 동안 Environment.Exit (0)을 실행했습니다. 디버그 모드에서 실행되는 동안, 내 뮤텍스가 정상적으로 정리되었습니다.
하지만 '릴리스'로 빌드를 변경하면 다음 뮤텍스는 통화 종료 후 주위의 유지 및 포기로 표시됩니다 :나는 두 번이 아니라는 것을 확인하기 위해 검사 한 이 뮤텍스가 첨부 된 프로세스가 계속 실행 중입니다.
지금 내 앱을 실행할 때마다 뮤텍스가 계속 존재하며 내 앱이 실행되지 않는다고 생각합니다. (그 자체를 보여주기 위해 응용 프로그램의 "현재 실행중인"인스턴스에 메시지를 보내려고하기 때문에 그것은 또한 충돌합니다.) 나는이 같은 뮤텍스를 해제하려고
:
bool createdNew;
string applicationId = "18773:TestStudio";
var singleInstanceMutex = new Mutex(true, applicationId, out createdNew);
singleInstanceMutex.Close(); // Tried ReleaseMutex() too
하지만 과정을 그 그냥 그것을 가져오고 그것을 해제합니다.
내가 재부팅 할 수 있다는 것을 알고 있지만, 프로덕션 환경에서 이러한 문제가 발생할 경우를 대비하여 더 나은 해결 방법을 찾고 있습니다.
뮤텍스를 만든 프로세스가 종료되어 사라진 경우 뮤텍스를 지우는 방법이 있습니까?
이 실제로 당신의 질문에 대한 대답, 그러나 여기에서 나는이 목적을 위해 사용하는 코드의 경우
귀하의 스크린 샷에 따르면 3 가지 사항이 여전히이를 참조하고 있습니다. 핸들이있는 3 가지 것들을 모두 닫습니다. –
@Scott Chamberlain - 참고 문헌은 그대로 남아 있지만 프로세스는 오래 전에 사라졌습니다. 그것은 참조를 해제하지 않은 방식으로 사망했다. 따라서 뮤텍스를 해제하는 방법에 대한 내 질문. – Vaccano
@ Vccano 그러면 두 가지 상황 중 하나가 발생합니다. 손상된 OS 설치 또는 무언가가 참조를 가지고 있다는 것을 깨닫지 못합니다. 정말 실패했다면 카운트는 0이 될 것이고, 실패한 프로세스의 핸들 정리는 Windows 95 (또는 98, 나는 기억할 수 없다)에서 다시 수정되었습니다. 프로그램이 실제로 죽지 않았거나 죽었거나 다른 프로그램 (IIS, 바이러스 백신, 누가 아는 사람)이 핸들을 잡아서 놓아 두지 않는다고 생각할 때 프로그램이 실제로 작동하지 않는 것입니다. –