programing

64비트 Windows에서 64비트 DLL이 System32로, 32비트 DLL이 SysWW64로 이동하는 이유는 무엇입니까?

showcode 2023. 4. 10. 22:27
반응형

64비트 Windows에서 64비트 DLL이 System32로, 32비트 DLL이 SysWW64로 이동하는 이유는 무엇입니까?

파일을 언제 저장해야 하는지 알고 싶습니다.

C:\Windows\System32 ★★★★★★★★★★★★★★★★★」C:\Windows\SysWOW64 윈도 에서는 64비트 윈도 시스템입니다

32비트용 DLL과 64비트용 DLL이 2개 있었습니다.

논리적으로 32비트 DLL을 C: 아래에 배치하려고 생각했습니다.\Windows\System32 및 C 아래의 64비트 DLL:\Windows\SysWOW64 。

놀랍게도, 그 반대예요!32비트는 C:에 들어갑니다.\Windows\SysWOW64 및 64비트 DLL은 C:\Windows\시스템32.

매우 혼란스러운 것들.이 배경은 무엇입니까?

System32의 이름을 바꾸는 것이 목적이라고 생각합니다만, 그 패스에 대해서 하드 코드 되어 있는 애플리케이션이 너무 많아서 삭제할 수 없었습니다.

SysWoW64는 64비트 시스템의 dll을 대상으로 한 것이 아닙니다.실제로는 "Windows on Windows 64"와 같은 것으로, 64비트 창에서 32비트 애플리케이션을 실행하는 데 필요한 비트를 의미합니다.

문서에서는 다음과 같이 설명합니다.

Windows x64에는 64비트 DLL(sic!)을 포함하는 System32 디렉토리가 있습니다.따라서 비트수가 64인 네이티브프로세스는 예상되는 장소인 System32 폴더에서 "그들의" DLL을 찾습니다.두 번째 디렉토리 SysWOW64에는 32비트 DLL이 포함되어 있습니다.파일 시스템 리디렉터는 32비트 프로세스의 실제 System32 디렉토리를 숨기고 System32라는 이름으로 SysWOW64를 표시하는 마법을 수행합니다.

인스톨러라고 하는 경우는, 시스템 폴더에의 패스를 하드 코드 하지 말아 주세요.대신 설치 관리자가 에뮬레이션 계층에서 실행 중인지 여부에 따라 윈도우즈에서 이 문제를 해결하도록 하십시오.

덧붙이자면:어쨌든 dll을 \system32\에 넣으면 안 됩니다.코드 수정, 설치 프로그램 수정...c:\windows\아래 어디에도 없는 비트의 집을 찾아주세요.

예를 들어 설치 관리자가 dll을 다음과 같이 입력합니다.

\program files\<your app dir>\

or

\program files\common files\<your app name>\

(주의: 실제로 이 작업을 수행하려면 환경 변수: %ProgramFiles% 또는 %ProgramFiles(x86)%를 사용하여 프로그램 파일의 위치를 찾습니다.c:\program files\...)라고는 생각되지 않습니다.

다음으로 레지스트리 태그를 설정합니다.

HKLM\software\<your app name>
-- dllLocation

dll을 사용하는 코드는 레지스트리를 읽고 해당 위치의 dll에 동적으로 링크합니다.

이상, 현명한 방법입니다.

dlls 또는 서드파티 dls는 \system32\ 또는 \syswow64에 설치하지 않습니다.정적으로 로드해야 할 경우 dll을 exe dir(dll이 있는 위치)에 입력합니다.exe dir를 예측할 수 없는 경우(예를 들어 다른 exe가 dll을 호출하는 경우 등), dll dir를 검색 경로에 넣어야 할 수 있습니다(가능한 경우 이를 피하십시오).

system32 및 syswow64는 Windows에서 제공하는 파일용입니다.파일 따윈 절대 안 돼사람들이 거기에 물건을 넣는 나쁜 습관을 갖게 된 유일한 이유는 그것이 항상 검색 경로에 있고 많은 앱/모듈이 정적 링크를 사용하기 때문입니다.(따라서 정말 중요한 것은 스태틱 링크입니다.이것은 네이티브 코드와 관리 대상 코드의 죄입니다.항상 동적으로 링크됩니다!)

같은 문제에 부딪혀 몇 분간 조사했다.

저는 Windows 3.1과 DOS를 사용하는 법을 배웠어요, 그 때 기억나요?한동안 Macintosh 컴퓨터를 엄격하게 사용하다가 x64비트 컴퓨터를 구입하고 나서 Windows로 돌아오기 시작했습니다.

이러한 변화의 배경에는 프로그래머가 작업을 계속하기 위해 필요한 실제적인 이유가 있습니다(일부에서는 역사적 의의가 있다고 말할 수도 있습니다).

대부분의 변경은 위에서 언급하고 있습니다.

  • Program Files »Program Files (x86)

    처음에 16/86비트 파일은 '86' 인텔 프로세서에 쓰여져 있었습니다.

  • System32 의미는 '무엇무엇무엇'이다System64 Windows (64비트판 Windows)

    개발자들이 처음 Windows 7을 사용하기 시작했을 때, 다른 애플리케이션이 저장되는 호환성 문제가 몇 가지 있었습니다.

  • SysWOW64 의미는 '무엇무엇무엇'이다SysWOW32

    기본적으로 쉬운 영어로 '64비트 시스템 내의 Windows on Windows'를 의미합니다.각 폴더는 사용하는 응용 프로그램의 DLL 위치를 나타냅니다.

필요한 모든 기본 정보가 포함된 2개의 링크를 다음에 나타냅니다.

이것으로 모든 것이 해결되었으면 좋겠다!

System32 Windows 32 DLL, System 16 DLL.Microsoft가 64비트 OS를 만들었을 때 내가 아는 모든 사람들은 파일이 System64에 있을 것으로 예상했지만 Microsoft는 64비트 파일을 System32에 넣는 것이 더 타당하다고 판단했습니다.제가 찾은 유일한 이유는 32비트의 모든 것이 64비트 Windows에서 작동하기를 원했기 때문입니다. 프로그램의 모든 것을 변경해야 합니다. 하다32비트 어플리케이션을 계속 실행할 수 있도록 Windows32 On Windows64라는 이름의 32비트 윈도 서브시스템을 만드는 방법을 사용했습니다.같이 는 sys입니다.WOW64는 32비트 서브시스템의 System 디렉토리용으로 작성되었습니다.시스템(WOW64) Windows32On Windows64의 시스템(WOW64).
Windows 16은 Windows 32에서 이미 분리되어 있기 때문에 Windows 16 On 64와 동등한 Windows 16 On은 필요하지 않습니다.32비트 서브시스템 내에서 프로그램이 system32 디렉토리의 파일을 사용할 때 실제로 SysWOW64 디렉토리에서 파일을 가져옵니다.하지만 그 과정에는 결함이 있다.

디자인이 형편없군요.경험상 64비트 어플리케이션 기술에는 많은 변경을 가해야 했습니다.System32 디렉토리를 System64 로 변경하는 것만으로 매우 작은 변경이며 컴파일러 전 지시사항을 처리할 수 있었습니다.

다른 사람들은 이미 이 말도 안 되는 난제를 잘 설명했고, 저는 크리스 호프만이 여기서 더 잘했다고 생각합니다: https://www.howtogeek.com/326509/whats-the-difference-between-the-system32-and-syswow64-folders-in-windows/

내 두 가지 생각:

  1. 우리 모두는 인생에서 어리석은 근시안적인 실수를 저지른다.Microsoft가 (당시) Win32 DLL 디렉토리를 "System32"라고 이름 붙였을 때, 그 당시에는 의미가 있었습니다.64비트(또는 128비트) 버전의 OS가 나중에 개발될 경우 어떤 일이 일어날지, 그리고 디렉토리 이름과 같은 대규모 하위 호환성 문제가 발생할지에 대해서는 고려하지 않았을 뿐입니다.나중에 생각하면 항상 20대 20이기 때문에, 그러한 실수에 대해 그들을 비난할 수는 없습니다.하지만...마이크로소프트가 나중에 64비트 운영체제를 개발했을 때, 비록 나중에 생각해봤지만, 왜 그들은 똑같은 근시안적인 실수를 다시 저질렀을 뿐만 아니라 일부러 그렇게 오해의 소지가 있는 이름을 지어줌으로써 그것을 더욱 악화시켰을까?부끄러운 줄 알아!!!혼란을 피하기 위해 적어도 디렉토리의 이름을 "SysWin32OnWin64"로 지으면 어떨까요?그리고 최종적으로 128비트 OS를 만들게 되면 어떻게 될까요?그러면 32비트, 64비트 및 128비트 DLL은 어디에 배치됩니까?

  2. 이 모든 논리는 여전히 나에게 완전히 결함이 있는 것처럼 보인다.32비트 버전의 Windows에서는 System32에 32비트 DLL이 포함되어 있습니다.64비트 버전의 Windows에서는 System32에 64비트 DLL이 포함되어 있기 때문에 개발자는 코드를 변경할 필요가 없습니다.이 로직의 문제는 개발자들이 64비트 DLL을 필요로 하는 64비트 어플리케이션을 만들거나 32비트 DLL을 필요로 하는 32비트 어플리케이션을 만들고 있다는 것입니다.어느 쪽이든, 아직 망한 거 아닌가요?즉, 32비트 앱을 아직 만들고 있다면 64비트 Windows에서 실행하려면 코드를 변경하여 이전에 사용하던 것과 동일한 32비트 DLL을 검색/참조해야 합니다(현재 SysWOW64에 있습니다.또는 64비트 앱에서 작업하는 경우 기존 앱을 새 OS용으로 다시 작성해야 하므로 재컴파일/재구축이 필요할 수 있습니다.

마이크로소프트는 가끔 나를 괴롭힌다.

언급URL : https://stackoverflow.com/questions/949959/why-do-64-bit-dlls-go-to-system32-and-32-bit-dlls-to-syswow64-on-64-bit-windows

반응형