Windows 7 액세스가 실행 파일에 거부되었습니다.


14

Windows 7을 사용하기 시작한 이후로이 문제로 인해 귀찮았습니다. 때때로 나는 다른 포럼에서 비슷한 질문이 나타나는 것을 보았지만 답을 보지 못했습니다. 거의 항상 그것을 재현하는 두 가지 시나리오는 다음과 같습니다.

탐험가 길

  1. 탐색기를 사용하여 하나 이상의 exe 파일이 포함 된 디렉토리로 이동하십시오.
  2. 하나의 디렉토리로 즉시 이동
  3. 방금 이동 한 디렉토리를 삭제하십시오.
  4. 수익률은 폴더 액세스가 거부 라는 대화 당신은 당신이 폴더를 변경하려면 관리자의 허가를 필요로이 작업을 수행 할 수있는 권한이 필요합니다 버튼과 함께, 다시 시도취소
  5. 다시 시도를 즉시 작동하지 않습니다. 1 분 정도 기다렸다가 다시 클릭하면 작동합니다

참고 : 2 단계에서 하나의 디렉토리로 이동하기 전에 1 분 이상 기다린 경우 문제가 발생하지 않고 폴더를 삭제할 수 있습니다

Visual Studio 방식

  1. exe 파일을 생성하는 프로젝트 빌드
  2. 실행 파일을 실행 한 다음 닫습니다
  3. 예를 들어 소스 파일에서 단일 문자를 변경하여 프로젝트를 즉시 다시 빌드하십시오.
  4. 산출 치명적인 오류 LNK1168을 : 쓰기 위해 열 수 없습니다 /path/to/the.exe

참고 : 2 단계에서 1 분 이상 기다렸다가 다시 빌드하면 문제가 발생하지 않습니다.

일부 사양

  • VS2008 / 2010 / 2011을 사용하여 Windows 7 32 및 64 비트에서 모두 발생
  • 3 개의 다른 머신에서 발생
  • 나는 어떤 종류의 바이러스 스캐너가 없습니다
  • 많은 서비스가 비활성화되어 있지만 Windows가 정상적으로 실행되지 못하게하는 것은 없으며 UAC도 비활성화되어 있습니다.
  • 모든 유형의 디스크에서 발생
  • 항상 관리자 그룹에있는 사용자 계정을 사용합니다

분명히 두 시나리오는 매우 유사하고 재현성이 뛰어납니다. 그래서 어떤 프로세스는 어떤 이유로 파일을 열어야한다고 생각하고 나중에 다시 릴리스합니다. 그러나 sysinternals 사용

handle -a

해당 exe 파일은 절대 나타나지 않습니다 . (즉, 핸들을 사용하는 올바른 방법입니까?) 탐색기 / VS에서 파일에 액세스 할 수 없다고보고하는 동안 handle.exe는 어디에서나 사용 중이 아니라고 말합니다. 이로 인해 나는 실마리를 얻지 못하므로 누군가가 해결책을 찾을 수 있는지 궁금합니다. 왜 이런 일이 발생하며 어떻게 해결할 수 있습니까?

질문에 대한 답변으로 업데이트 :

  • 안전 모드에서 문제를 재현 할 수 없습니다
  • 많은 셸 확장이 설치되었습니다. SellExView에는 NitroPDF, WinRAR, TortoiseGit, TortoiseSvn, NVidia와 같은 모든 컴퓨터에 공통적 인 Microsoft 이외의 제품이 있습니다. '상태 캐시'옵션 모두 '한 폴더에 대해서만 상태 캐시, 재귀 오버레이 없음'으로 설정되어 있지만 TortoiseCache.exe가 실행되지 않는 Tortoise가 가장 의심 스럽습니다.
  • 탐색기 문제로 ProcessExplorer가 실행 파일을 표시하지 않습니다. 실행 파일의 디렉토리는 표시하지만 삭제 된 후에도 계속 표시되므로 실제로는 관련이 없습니다.
  • VS 문제의 경우 대상 디렉토리에서 탐색기 창이 열려 있지 않은 경우에도 VS에서 발생합니다. 또한 ProcessExplorer는 실행 파일이나 실행 파일이있는 디렉토리를 표시하지 않습니다. VS의이 '모드'에서는 실행 파일을 실행할 때만 문제가 발생합니다. 실행하지 않으면 매번 문제없이 빌드 할 수 있습니다.
  • 'VS 모드' 실행 파일의 디렉토리가 열려있는 탐색기 창 (C # exe로만 테스트 됨)에서 이상하게 나타납니다 .VS가 exe가 다른 프로세스에서 사용되고 있다고 불평하기 때문에 다시 빌드 할 수 없습니다. 그러나 열린 탐색기 창에서 exe를 삭제하면 작동하며 결과적으로 빌드가 성공합니다. 다시 말하지만 ProcessExplorer에는 참조가 없습니다. handle.exe와 내 결과가 일치하는 것 같습니다 (PE와 핸들은 내부적으로 동일한 API를 사용하지 않습니까?)

업데이트 2 그것은 단지 탐색기 일 수는 없습니다 : explorer.exe를 죽인 후에도 VS 문제가 여전히 있습니다.

업데이트 3 Asher에 따르면 Process Monitor를 사용하면 흥미로운 사실을 알 수 있습니다. 탐색기 모드의 경우 디렉토리를 열 때 IRP_MJ_CREATE에 10 번의 호출이 있습니다. 그러나 IRP_MJ_CLEANUP에 대한 9 번의 호출 만 있습니다. 이 모든 호출은 그래서 확실히, Shell32.dll에서 내에서 발생 하지 문제를 설치하는 제 3 자. 그리고 디렉토리를 연 후 정확히 1 분이 지나면 시스템 프로세스 자체가 IRP_MJ_CLEANUP 호출을 발행하고 파일이 해제되고 파일이 삭제됩니다.

그러나 나는 왜 이것이 왜 일어나는지 알 수 없었습니다. 내가 만든 일부 변경으로 인해 발생하는 탐색기 버그입니까?

해결책! 내가 사용할 수있는 서비스를 통해 보면서, 나는에 대한 설명 눈치 응용 프로그램 환경은 말한다, 나는 인용, 응용 프로그램에 대한 응용 프로그램 호환성 캐시 요청을 처리 가 시작 될 때 . 익숙한 것 같습니다. 실제로 서비스를 시작한 후에는 더 이상 문제를 재현 할 수 없으며 ProcMon의 출력이 다르고 짧습니다. 재밌는 것은, 서비스를 다시 중단 한 후에도 모든 것이 여전히 양호하고 procmon의 출력이 여전히 짧기 때문입니다.

나는 두 번째 컴퓨터에서 이것을 시도했는데, 모든 타사 물건이 행복하게 실행되고 여전히 괜찮습니다.

이것이 실제 버그인지 확실하지 않지만 ( '서비스를 비활성화하면 어떤 결과를 기대할 수 있습니까?'), 단순히 서비스를 시작한 다음 다시 중지하여 문제가 해결되는 것은 아닙니다.


바운티는 이것에 대해 더 깊은 통찰력을 제공 할 수있는 누군가에게, 그렇지 않으면 @Asher에게 나를 ProcMon으로 안내하여 결국 올바른 방향으로 인도했습니다.


2
몇 가지 질문이 있습니다. 탐색기 문제가 안전 모드에서 발생합니까? 쉘 확장이 설치되어 있습니까? Visual Studio 문제로 프로세스 모니터를 실행하고 exe로 필터링하면 파일에 액세스하는 것이 표시됩니까?
sgmoore 16:26에

이상하게도, 두 시나리오 모두 나에게 예상대로 작동한다고 제안합니다 (오류 없음). sgmoore이 제안한 것처럼 프로세스 모니터를 정리하고 폴더 / 파일을 모니터링하십시오.
Ƭᴇcʜιᴇ007

@ sgmoore 참조 업데이트
stijn

이 호출이 타사 설치를 배제한 shell32.dll에서 시작 되었기 때문에 100 % 확실합니까? 나는 그것이 사실인지 아닌지 확신하기 위해 매우 낮은 수준에서 진행되는 일에 대해 충분히 알지 못하지만 확실히 내가 만든 가정은 아닙니다.
sgmoore

@sgmoore 100 % 아니요, 99 % 예 나의 결론은 내가 여기에 쓴 것에 근거한 것이 아니다. 모든 시스템 dll에 대한 기호가 있으므로 procmon의 호출 스택에서 전체 함수 이름을 볼 수 있습니다. 디렉토리를 열 때 탐색기가 호출 한 모든 호출은 CLoadIconTask와 같은 이름 ( 'Microsoft'로 작성된 이름)이있는 클래스에서 온 것입니다. 저는 프로그래머이므로 콜 스택 해석에 대한 지식이 있습니다. Microsoft 이외의 모든 것은 여전히 ​​자동 실행에서 비활성화되어 있습니다. 다른 컴퓨터에서는 그렇지 않지만 전체 procmon 출력은 동일합니다. 이 모든 직관은 그것이 MS 일 뿐이라고 강력하게 믿습니다.
stijn

답변:


7

당신이보고있는 문제는 Windows 탐색기가 생성하는 thumbs.db와 관련이 있다고 생각합니다. 이 기능을 비활성화하고 재부팅 한 후 문제가 재현되는지 확인하십시오.

thumbs.db가 그룹 정책 편집기 (gpedit.msc)를 열지 못하게하려면 사용자 구성-제어판> 관리 템플릿-폴더 옵션> Windows 구성 요소 -Viev 탭> Windows 탐색기로 이동하십시오. "숨겨진 thumbs.db 파일에서 썸네일 캐싱 해제"를 찾아 섬네일 캐시 안 함을 활성화하십시오.

작동하지 않으면 Sysinternals Process Monitor를 사용하여 조사해보십시오. 액세스가 거부 될 때이 폴더를 사용하여 누가 폴더에 액세스하는지 확인하십시오. 실제로 액세스 거부 또는 공유 위반인지 확인하십시오. 이는 누군가 파일을 보유하고 있음을 의미합니다.


1
Win7에는 Thumbs.db가 없습니다.
kinokijuf

1
그렇습니다. 폴더 옵션으로 이동하여 "숨겨진 파일, 폴더 및 드라이브 표시"를 활성화하십시오
Asher

1
Windows 7은 %userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_*.db리소스가 thumbs.db원격 위치 (예 : GP에 의해 비활성화 될 수 있음)에 저장된 리소스를 원격으로 사용하지 않는 한 (네트워크 공유와 같이) 로컬 썸네일 캐시 ( )를 사용합니다 .
Ƭᴇcʜιᴇ007

2
upvoted : Do Not Cache Thumbnails 옵션은 없지만 ProcessExplorer 또는 핸들과 달리 문제의 증거를 제공하기 때문에 ProcMon을 사용하면 마침내 어딘가에 도착했습니다. 디렉토리를 열거 나 exe를 실행 한 후 정확히 1 분이 지나면 IRP_MJ_CLEANUP 파일을 릴리스하는 것처럼 보이는 시스템 프로세스에서 작업 : 해당 이벤트 직후 디렉토리를 다시 삭제할 수 있습니다. ProcMon이 제공하는 내용을 이해할 수 있다면 더 자세히 조사하겠습니다.
stijn

3
@kinokijuf 방금 당신이 Ahser의 대답을 어지럽 힌 것으로 나타났습니다. 왜 그렇게하는지 모르겠지만 이해가되지 않습니다. 먼저 굵은 글씨로 thumbs.db가 없다고 말합니다. 그런 다음 Asher의 답변을 편집하여 thums.db를 비활성화하는 방법 부분을 사용할 수 없게 만드는 부분을 사용할 수 없게합니다 ( "thumnbnails을 캐시하지 마십시오"는 XP 용). 그런 일을하지 마십시오.
stijn

3

어떤 종류의 보안 제품도 설치되어 있지 않습니까?

설명하는 시나리오는 일부 제품이 사용자가 액세스 할 수있는 모든 실행 파일에 액세스 할 수 있다는 이론과 호환되므로 독점적으로 액세스 할 수 없습니다. 이것은 바이러스 백신 일 필요는 없습니다. 예를 들어 빠른 검색을위한 인덱서 또는 바이러스 (예 : 바이러스) 일 수도 있습니다.

Windows 이외의 제품이 전혀 실행되지 않는 안전 모드에서 부팅하여이 이론을 테스트 할 수 있습니다.

파일 액세스 추적을위한 가장 좋은 도구는 프로세스 모니터 입니다. 모든 스타트 업 제품을 찾아서 다시 켜는 또 다른 훌륭한 도구는 자동 실행 입니다.


색인화는 Windows 검색 기능도 해제되어 있습니다. 제 3 자 보안 또는 검색 도구가 없습니다. 기본적으로 자동 실행에서 타사 도구를 비활성화 한 다음 하나씩 활성화하는 것이 좋습니다.
stijn

안전 모드 부팅에서이 문제가 발생하지 않으면 설치된 일부 제품이 책임을 져야합니다. 자동 실행을 사용하여 시작 항목을 일괄 적으로 비활성화하고 찾을 때까지 재부팅 할 수 있습니다. 자동 실행의 장점은 항목을 쉽게 다시 활성화하고 현재 상황을 저장 / 복원 / 비교할 수 있다는 것입니다. 그러나 경우에 대비하여 먼저 시스템 복원 지점을 먼저 만드는 것이 좋습니다.
harrymc

로그온, 탐색기, Internet Explorer 및 서비스에서 Microsoft 이외의 모든 것을 비활성화했습니다. 문제가 여전히 존재합니다. 일반 모드와 안전 모드에서로드 된 내용을 비교할 수있는 방법이 있습니까?
stijn

기본적으로 자동 실행에 표시되는 모든 항목은 일반 모드에서만로드됩니다.
harrymc

글쎄, 서비스, 네트워크 등을 제외하고
harrymc

2

커널 모드에서 파일 또는 디렉토리를 연 다음

handle -a

ProcMon은 시스템 프로세스와의 IRP 요청을 보여줍니다.

모든 프로세스에 매핑되는 Windows Kernel의 일부가 있으며 별도의 프로세스로 실행되는 Windows Kernel의 다른 부분이 있습니다. 후자를 Windows Executive라고합니다.

따라서 이것은 Windows Executive 프로세스의 커널 모드에서 열린 파일 또는 디렉토리로 인해 발생합니다.


1

exe에서 아이콘과 메타 데이터를 읽는 탐색기 일 수 있습니다.


이것은 탐색기에 대한 가능한 설명이지만 탐색기가이 폴더를 동시에 표시하지 않는 한 Visual Studio에는 해당되지 않습니다. @stijn : Explorer가없는 Visual Studio에서 이런 일이 발생합니까?
harrymc

@harrymc 참조 업데이트, 탐색기없이 발생 (잘, explorer.exe가 아직 실행 중이지만 exe의 디렉토리에 없음)
stijn

그리고이 문제를 어떻게 해결합니까?
Simon Sheehan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.