С выпуском Windows 7 из 64-разрядных версий было внесено небольшое изменение в нормальное распределение папок в каталоге Windows. Две новые папки включены в 64-разрядную версию Windows 7, Windows 8 и Windows 10. Они Sysnative а также SysWOW64 папки. Это только в 64-битной Windows. Если вы запустите 32-разрядную Windows на 64-битной машине, вы ее не увидите. Также вы не увидите их при запуске 32-разрядной Windows на 32-битной машине.
Существует другая папка за пределами каталога Windows, и она называется Файлы программы (x86), Мы привыкли к имени папки Program Files, в которой хранятся исполняемые файлы наших программ. В 64-разрядных системах 64-разрядные программы хранятся в папке Program Files, в то время как 32-разрядные программы размещаются в Program Files (x86). Однако Windows использует нечто вроде эмуляции для запуска 32-разрядных программ на 64-разрядной машине. И, следовательно, необходимо знать и понимать, что представляют собой системные папки под Windows (64 бит), чтобы вы знали, как достичь желаемого файла.
В отличие от 32-разрядных машин, где 32-разрядные библиотеки DLL хранятся в Папка System32, 64-разрядная версия Windows хранит библиотеки DLL, связанные с 64-разрядными в папке System32. Это облегчает программирование и обеспечивает обратную совместимость. То есть, если 64-битная программа ссылается на System32 в своем коде, она будет получать 64-разрядную DLL автоматически при вызове. Это помогает разработчикам, так как им не нужно менять код в своих программах для Windows 64-bit.
Короче говоря, Windows переместила все 32-разрядные DLL из папки System32 в каталог Windows в другую папку, чтобы предыдущие программы не нуждались в перекодировке, чтобы получить соответствующие DLL-файлы даже при использовании API-интерфейсов - после обновления до 64-разрядных. Проблема возникает, когда 32-разрядное приложение пытается получить доступ к папке System32. В этом случае программа выйдет из строя, поскольку она не написана для обработки 64-разрядных библиотек DLL.
Папка SysWOW64 в Windows 64-разрядная
Все 32-разрядные библиотеки DLL были перенесены на новый Папка SysWOW64 в 64-разрядной версии Windows 7, Windows 8 и Windows 10, поэтому, когда 32-разрядные программы обращаются к 32-разрядным DLL, они должны попасть в папку SysWOW64.
Вы можете почувствовать, что разработчикам придется сканировать свои программы и приложения, чтобы указать функции DLL в папку SysWOW64. Но Microsoft уже позаботилась об этом. Если это 32-разрядная программа, вызывающая C: Windows System32, эмулятор перенаправляет путь к C: Windows SysWOW64, То есть для запуска 32-разрядных программ в Windows 64-бит используется эмулятор, чтобы обеспечить надлежащую обратную совместимость и избежать ошибок при вызове DLL-файлов.
Синтаксическая папка в Windows 64-разрядная
Могут быть случаи, когда 32-разрядная программа или приложение действительно нуждаются в 64-разрядной DLL. В этом случае вам придется использовать папку перенаправления Sysnative, Вы можете рассматривать SysNative как виртуальную папку и псевдоним, указывающий на папку System32. Это физически не существует в вашей системе, как таковая. Поэтому, если вашей 32-разрядной программе требуется доступ к 64-разрядной DLL, не используйте C: Windows System32 потому что 32-разрядный эмулятор программы перенесет его в 32-битную папку DLL под названием SysWOW64. Вместо этого используйте C: Windows Sysnative как путь к программе DLL. Использование Sysnative в пути перенаправит его в папку System32 вместо папки SysWOW64.
Если вы откроете File Windows Explorer, вы не найдете папку Sysnative в C: Windows. Даже если вы установите для параметра «Параметры папки» скрытые и системные папки. Это связано с тем, что Windows File Explorer является 64-разрядной программой при работе в 64-разрядной Windows, а папка Sysnative видна и доступна только из 32-разрядных программ.
Подводить итоги:
- Папки System32 содержат 64-разрядные DLL-файлы.
- SysWOW64 содержит 32-разрядные DLL-файлы, а 32-разрядные программы автоматически перенаправляются в эту папку
- Sysnative - это папка перенаправления, позволяющая 32-разрядным программам вызывать 64-битные библиотеки DLL.
Дополнительное чтение: MSDN.