File.exsit 조회 시스템 32에서 dll 오류 | 윈도우즈 64 파일 리셋 메커니즘

1738 단어 C#
현상: 최근에 한 항목에서 File을 발견했습니다.Exist에서 시스템 32의 dll을 찾았을 때 분명히 dll이 존재하지 않았지만 되돌아오는 것은 존재했다.MMP...
64비트 윈도우즈 운영체제에 파일 시스템 리셋 메커니즘이 존재하는 것을 확인했습니다. 즉, 시스템 32에 어떤 파일이 존재하지 않더라도syswow64에 같은 이름의 파일이 존재한다면 File.exist에서 시스템 32에 이 파일이 존재한다고 판단합니다...
그리고 이 문제를 해결하기 위해서는 파일 시스템을 잠시 닫고 방향을 바꿔야 합니다.
https://www.cnblogs.com/iamlucky/p/5998086.html
이 대장부의 문장에 근거하여 문제를 해결할 수 있다
코드는 다음과 같습니다.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace FindFileTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string DLL1 = @"C:\Windows\System32\msvcp140.dll";
            string DLL2 = @"C:\Windows\System32\vcruntime140.dll";

            IntPtr oldWOW64State = new IntPtr();
            Wow64DisableWow64FsRedirection(ref oldWOW64State);   //   64 (    )     
          
            Console.WriteLine( File.Exists(DLL1));
            Console.WriteLine(File.Exists(DLL2));

            Wow64RevertWow64FsRedirection(oldWOW64State);
            Console.WriteLine(File.Exists(DLL1));
            Console.WriteLine(File.Exists(DLL2));
            Console.ReadKey();
        }

        //   64 (    )     
        [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
        //   64 (    )     
        [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);

        
    }
}

알아내는 데 3시간 정도 걸렸어요. 적어서 시간 낭비 방지.

좋은 웹페이지 즐겨찾기