디버거에서 실행할 때 AssignProcessToJobObject가 "액세스 거부" 오류와 함께 실패합니다.

StackOverflow https://stackoverflow.com/questions/89588

  •  01-07-2019
  •  | 
  •  

문제

당신은 AssignProcessToJobObject "액세스 거부"로 인해 실패하지만 디버거에서 실행 중인 경우에만 가능합니다.왜 이런거야?

도움이 되었습니까?

해결책

이것은 약 30분 동안 나를 혼란스럽게 했습니다.

먼저 앱에 UAC 매니페스트가 포함되어 있어야 할 것입니다(여기에 제안된 대로).이 같은:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <!-- Identify the application security requirements. -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
        <requestedPrivileges>
          <requestedExecutionLevel
            level="asInvoker"
            uiAccess="false"/>
        </requestedPrivileges>
      </security>
    </trustInfo>
  </assembly>

두 번째로(이 부분이 제가 막히는 부분입니다) 디버거에서 앱을 실행하면 작업 개체에 프로세스가 생성됩니다.작업에 할당하기 전에 자식 프로세스에서 이탈할 수 있어야 하는 것입니다.그래서 (duh), 당신은 지정해야 CREATE_BREAKAWAY_FROM_JOB 에 대한 플래그에서 CreateProcess).

디버거에서 실행되지 않았거나 상위 프로세스가 작업에 있었다면 이런 일은 발생하지 않았을 것입니다.

다른 팁

이것은 나를 꽤 자주 괴롭히는 것 같고, 1800INFORMATION의 게시물에는 도움이 될 것 같은 여러 가지 이유와 수정 사항이 포함되어 있지 않은 것 같으므로 이러한 일이 발생하는 이유에 대한 요약을 게시하는 것이 가치가 있는 것 같습니다.

  1. 이것을 직접 해결하려고 할 때 CMD.exe, Explorer 및 Visual Studio에서 실행할 때이 문제 보다이 문제가 발생할 수 있습니다.각 장소에서 실행 가능한 실행 파일을 실행하려고하면 문제의 원인을 식별하는 데 도움이 될 수 있습니다.귀하의 앱은 VS에서 실패 했음에도 불구하고 CMD.exe에서 찾을 수 있습니다.및 Explorer.exe
  2. 제 경우에는 Win7에서 app.manifest 파일에서 Win7 호환성을 나타내는 "supporedoS"요소를 사용하지 않는 것으로 보입니다.이는 Explorer에서 실행할 때 발생하는 문제를 해결하는 것 같습니다.매니페스트를 추가하려면 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Add를 누르고 '응용 프로그램 Manifest 파일'을 찾으십시오.
  3. Visual Studio 2010을 작동시키려면 프로그램 호환성 관리자 사용을 중지해야 할 것 같았습니다. Tom Minka는 여기에서 이를 수행하는 두 가지 방법을 공유합니다. https://stackoverflow.com/a/4232259/86375, 그가 제안한 변경 사항을 적용하려면 VS2010을 다시 시작해야 했습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top