FileNotFoundError: [WinError 3] 지정된 경로를 찾을 수 없습니다: C:\Windows\System32\winevt\Logs\Setup.evtx
이러한 에러를 보게 됐다. 디버깅을 하다보니 System32까지는 읽히는데 winevt읽는 순간 에러가 난다.
stackoverflow에서는 64bit 운영체제에서 32bit 파이썬을 사용하기 때문이라고 한다.
대부분의 경우, 32-bit 애플리케이션은 %windir%\System32로 접근을 시도하려고 할 때마다 %windir%\SysWOW64로 리다이렉트 시킨다.
때문에 우리는 C:\windows\sysnative\winevt\logs 로 접근을 하여야 한다.
system32 & syswow64
각종 시스템에서 필요한 파일들이 위치하고 있는 폴더이다. 64비트 운영체제가 들어오면서 system32와 syswow64로 나뉘게 되었다. 64비트에서도 32비트 프로그램이 실행되어야 하기 때문이다.
가끔 File Not Found가 뜰 경우 경로 지정을 %systemroot%\system32 이 경로를 %systemroot%\sysnative로 접근하면 문제가 해결이 된다.
종종, 64비트 운영체제에서 32비트 도구는 system32에 있고, 64비트 도구는 syswow64에 있다고 헷갈리는 분들고 있다. 하지만 그 반대로 이해해야 한다.
sysnative
Windows Explorer를 시작하고 운영체제가 설치된 디스크에서 Windows 폴더를 열면 sysnative 폴더가 표시되지 않는다. 그 이유는 Windows Explorer가 64비트 프로그램이기 때문이다(64-bit 윈도우즈 실행). Sysnative 폴더는 32-bit 소프트웨어에서만 볼 수 있고 액세스가 가능하다.
이 Sysnative 폴더는 32-bit 코드로부터 64-bit 도구에 접근가능할 수 있게 돕는다. 64비트 윈도우의 일부 도구는 64비트 버전에만 존재하며 사용 가능한 32비트 버전은 없다. 이러한 도구들 중 일부는 64비트 System32 폴더에 있다.
폴더가 존재하고 파일이 존재하는대 File not found 에러가 나오는 경우가 이러한 경우라고 볼 수 있다. 이 문제를 해결하기 위해서는 가상 Sysnative 폴더를 포함시키는 것이다.
비스타 이후의 버전에서 사용 가능하다고 한다.
참고 : https://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm