왜 64 비트 DLL은 System32로, 32 비트 DLL은 64 비트 Windows에서 SysWoW64로 이동합니까?



1 Answers

나는 추가해야한다 : 당신은 \ system32 \에 어쨌든 당신의 dll을 넣으면 안된다! 코드를 수정하고 설치 프로그램을 수정하십시오 ... c : \ windows \

예를 들어, 설치 프로그램은 dll을 다음 위치에 저장합니다.

\program files\<your app dir>\

or

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

( 참고 : 실제로 이렇게하는 방법 은 var : % ProgramFiles % 또는 % ProgramFiles (x86) % 환경을 사용하여 Program Files가 어디에 있는지 확인하는 것입니다. c : \ program files \ ..라고 가정하지 마십시오. ..)

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

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

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

위는 현명한 방법입니다.

\ system32 \ 또는 \ syswow64에 dll이나 타사 DLL을 설치하지 마십시오. 당신이 정적으로로드해야한다면, 당신은 당신의 exe 디렉토리 (어디에 그들이 발견 될 것입니다)에 DLL을 넣으십시오. exe 디렉토리를 예측할 수 없다면 (예를 들어 다른 exe가 dll을 호출 할 것임) dll 디렉토리를 검색 경로에 추가해야 할 수도 있습니다 (가능한 경우이 옵션을 사용하지 마십시오!).

system32 및 syswow64는 Windows 제공 파일 용이며 다른 사람에게는 적합하지 않습니다 . 사람들은 항상 검색 경로에 있기 때문에 물건을 넣는 습관이 들었습니다. 많은 앱 / 모듈은 정적 링크를 사용합니다. (따라서 진정한 죄는 정적 링크입니다 - 이것은 원시 코드와 관리 코드의 죄입니다 - 언제나 항상 항상 동적으로 링크됩니다!)

Question

나는 언제 파일을 저장할 필요가 있는지 알고 싶다.

C : \ Windows \ System32 또는 C : \ Windows \ SysWOW64 (64 비트 Windows 시스템).

두 개의 DLL을 가지고 있는데 하나는 32 비트 용이고 다른 하나는 64 비트 용입니다.

논리적으로는 32 비트 DLL을 C : \ Windows \ System32에두고 64 비트 DLL을 C : \ Windows \ SysWOW64에 넣을 것입니다.

놀랍게도, 그것은 다른 방향입니다 ! 32 비트는 C : \ Windows \ SysWOW 64 로 들어가고 64 비트 DLL은 C : \ Windows \ System 32로 이동 합니다.

매우 혼란스러운 물건. 이것의 원인은 무엇입니까?




System32는 Windows가 역사적으로 모든 32 비트 DLL을 배치 한 곳이며 System은 16 비트 DLL 용입니다. 마이크로 소프트가 64 비트 OS를 만들었을 때, 필자가 아는 모두는 파일이 System64에 존재할 것으로 예상했지만, 마이크로 소프트는 64 비트 파일을 System32에 두는 것이 더 합리적이라고 결론 지었다. 필자가 발견 한 유일한 추론은 프로그램에서 아무 것도 변경하지 않고 64 비트 Windows에서 32 비트 작업을 수행하기를 원했기 때문입니다. 다시 컴파일하면 완료됩니다. 그들이 32 비트 응용 프로그램을 계속 실행할 수 있도록이 문제를 해결 한 방법은 Windows32의 Windows32라는 32 비트 Windows 하위 시스템을 만드는 것이 었습니다. 이와 같이 SysWOW64라는 약어는 32 비트 서브 시스템의 시스템 디렉토리 용으로 작성되었습니다. Sys는 System의 약자이며 WOW64는 Windows32OnWindows64의 약자입니다.
Windows 16은 Windows 32에서 이미 분리되었으므로 Windows 16 On Windows 64 동등성은 필요하지 않습니다. 32 비트 서브 시스템 내에서 system32 디렉토리의 파일을 사용하는 프로그램은 실제로 SysWOW64 디렉토리에서 파일을 가져옵니다. 그러나 그 과정에는 결함이 있습니다.

그것은 끔찍한 디자인입니다. 필자의 경험에 비추어 볼 때, 64 비트 응용 프로그램을 작성하는 데 더 많은 변화를 주어야했습니다. 단순히 System32 디렉토리를 System64 디렉토리로 변경하면 매우 작은 변화 였을 것이고 사전 컴파일러 지시문이 처리 할 수있는 변경 사항이었을 것입니다.



Related