Error code 2: The system cannot find the file specified.
1641 단어 테크니컬
// Process 1:
......
HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, _T("my_private_event_name")); //
......
// Process 2:
HANDLE hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, _T("my_private_event_name")); // ???
두 장면을 상상해 보면,
1. 일반 사용자 호출.즉 사용자가 먼저 프로세스 1을 시작한 다음에 프로세스 2를 시작하는 것이다.
2. 사용자가 먼저 프로세스 1을 시작하고 프로세스 2는 스크립트 언어로 호출된다(예를 들어 asp, 데이터베이스 저장 프로세스...).
첫 번째 상황에서는 기본적으로 문제가 생기지 않을 것이 분명하다.문제는 두 번째 응용 환경!
이런 상황에서 불행하게도 당신이 직면한 것은 "The system cannot find the file specified"오류입니다!이게 어디에 문제가 생겼을까--권한?만약 이렇게 간단하다면, 단독으로 이 문제를 기록할 필요가 없다.나도 이 위에서 오전 내내 시간을 낭비했다. 문제의 최종 근원은 바로'명명공간'에 있다!익숙하죠?하지만 이건 정말 상상도 못했어!!!커널 대상인 만큼 OS 전역에 존재해야 하고 어떤 앱이든 찾아볼 수 있는데 왜 이름을 붙여서 못 찾지?이는 커널의 이름이 OS 내부에 있다고만 할 수 있고 이름 공간으로 구분돼 저장된다.두 프로세스가 explorer나 cmd를 통해 시작될 때, 이 이름들은 같은 공간에 저장됩니다.그러나 스크립트 언어가 이 프로세스를 호출할 때, 이 하위 프로세스는 부모 프로세스 (스크립트 언어) 의 일부 특성을 계승할 수 있습니다. 내부 핵 대상의 이름 공간을 포함합니다.이렇게 하면 서로 다른 응용 환경에서 두 개의 프로세스를 시작할 때 일반적인 상황에서 문제가 발생하지 않는 API에 문제가 생기는 것을 발견할 수 있습니다. 이름 공간이 다르기 때문에 이름을 통해 핵 대상을 찾는 데 실패합니다. (ErrorCode: 2)!
이 문제의 최종 해결 방법은 내부 핵 대상의 이름에 전체 국면의 명칭 공간을 더하는 것이다. 즉, 상기 두 단락을 다음과 같이 바꾸는 것이다.
//Process 1:
......
HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, _T("Global\\my_private_event_name")); //
......
// Process 2:
HANDLE hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, _T("Global\\my_private_event_name")); // ???
이 재난을 겪은 후에 유사한 코드를 쓸 때는 모두'Global'의 명칭 공간을 붙이는 것이 가장 좋다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
golang에서 대상 방법을 함수 지침으로 삼다누드 함수 를 지침 으로 삼는 것 은 그리 신기한 일 이 아니다. 다른 언어 도 괜찮다. 골롱 도 당연히 가능하다. 예를 들면 그러나 아래와 같이 대상의 실례적인 방법은 함수 매개 변수로 전달될 수 있습니까? 답은 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.