Sysnative что это за папка Windows 10
Обновлено: 23.11.2024
Допустим, вы написали небольшой 32-битный скрипт, который вызывает команду Windows, например nbtstat . Когда вы пытаетесь запустить скрипт в 64-разрядной версии Windows, вы получаете надоедливую ошибку «Файл не найден», хотя вы видите, что команда находится в папке \Windows\system32.
Что здесь происходит?
64-разрядная версия Windows имеет две системные папки: \Windows\system32 и \Windows\SysWOW64 .
32-разрядные команды находятся в папке SysWOW64, а 64-разрядные команды хранятся в каталоге system32. x64 Windows по умолчанию ищет в system32, когда вы вызываете функцию командной строки, так как она пытается вызвать 64-битные возможности (нет, это не наоборот!).
Итак, вы можете подумать, что можете просто изменить свой сценарий, чтобы он явно вызывал, например, \Windows\system32\nbtstat вместо просто nbtstat , и все будет готово, верно? Неправильно.
К счастью, есть простой способ решить эту небольшую проблему…
Причина, по которой вызов функции командной строки с указанием полного пути не работает, заключается в том, что в Windows есть прекрасное встроенное «автоматическое перенаправление» в папку SysWOW64 (32-разрядные файлы). Поскольку ваш скрипт 32-разрядный, срабатывает перенаправление.
Если вы пишете настоящее приложение для Windows, вы можете отключить это автоматическое перенаправление ( Wow64DisableWow64FsRedirection ). Однако это не сработает для простого скрипта Ruby, такого как мой LAN Scanning Tool. На самом деле, именно здесь я столкнулся с этой проблемой на днях. Я не тестировал свой маленький инструмент на 64-разрядной версии Windows. После установки 64-разрядной версии Windows 7 Release Candidate я обнаружил, что приложение LANscan.exe выдает ошибку, о которой я упоминал выше.
К счастью для нас, решить эту небольшую проблему очень просто.
Оказалось, что 64-разрядная версия Windows включает в себя «виртуальную папку» с именем \Windows\sysnative . Папка sysnative не видна ни в проводнике, ни даже из командной строки. Если вы вызовете команду в sysnative из обычного приложения, она не сработает. Но если вы вызываете \Windows\sysnative\nbtstat из скрипта, такого как мое приложение LANscan на основе Ruby, Windows автоматически перенаправит вызов в каталог \Windows\system32 вместо того, чтобы по умолчанию использовать 32-битный материал в \Windows. \SysWOW64 . Таким образом, ваше 32-битное приложение может получить доступ к функциям в собственном 64-битном каталоге «system32»! Круто, да?
Обратите внимание, что этот прием перенаправления не является обязательным для всех системных вызовов. Например, ping существует как в 32-битном, так и в 64-битном исполняемом файле. В этом случае переадресация не требуется. Однако в моем случае nbtstat доступен только как 64-битная функция в \Windows\system32 , а НЕ как 32-битный исполняемый файл в \Windows\SysWOW64 . Вот почему я получал сообщение об ошибке «не найдено»: потому что Windows автоматически перенаправляла мой вызов в 32-разрядный каталог SysWOW64.
Чтобы ваш сценарий работал как в 32-разрядной, так и в 64-разрядной версии Windows, вы можете сделать в своих сценариях что-то вроде следующего:
Конечно, приведенный выше пример написан на Ruby, поэтому вам придется настроить его для выбранного вами языка. Но общая идея остается прежней:
- Проверьте наличие \Windows\SysWOW64
- Если каталог существует, вы работаете в 64-разрядной версии Windows, поэтому вызовите команду, указав полный путь \Windows\sysnative
- Если каталог не существует, значит, вы работаете в 32-разрядной версии Windows, поэтому вызовите команду без указания пути и позвольте Windows обработать ее.
Довольно просто, а?
Я выпустил версию 1.3 моего инструмента сканирования LAN, которую вы можете скачать бесплатно. Теперь он полностью поддерживает XP, XP x64, Vista, Vista x64, Win7 и Win7 x64.
С выпуском 64-разрядной версии Windows 7 в обычное размещение папок в каталоге Windows были внесены небольшие изменения. Две новые папки включены в 64-разрядную версию Windows 10, Windows 8 и Windows 70. Это папки Sysnative и SysWOW64. Это только в 64-битной винде. Если вы запустите 32-битную Windows на 64-битной машине, вы их не увидите. Вы также не увидите их при запуске 32-разрядной версии Windows на 32-разрядной машине.
Вне каталога Windows есть еще одна папка, которая называется Program Files (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 при вызове. Это помогает разработчикам, поскольку им не нужно изменять код в своих программах для 64-разрядной версии Windows.
Короче говоря, Windows переместила все 32-разрядные библиотеки DLL из папки System32 в каталоге Windows в другую папку, чтобы предыдущие программы не нужно было перекодировать для получения правильных библиотек DLL даже при использовании API — после обновления до 64-разрядной версии. . Проблема возникает, когда 32-разрядное приложение пытается получить доступ к папке System32. В этом случае произойдет сбой программы, поскольку она не предназначена для обработки 64-разрядных библиотек DLL.
Читайте: что такое папка Panther?
Папка SysWOW64 в 64-разрядной версии Windows
Все 32-разрядные библиотеки DLL были перемещены в новую папку SysWOW64 в 64-разрядных версиях Windows 10, Windows 8 и Windows 7, поэтому, когда 32-разрядные программы вызывают 32-разрядные библиотеки DLL, они чтобы добраться до папки SysWOW64.
Вы можете подумать, что разработчикам придется сканировать свои программы и приложения, чтобы указать функции DLL на папку SysWOW64. Но Microsoft уже позаботилась об этом. Если это 32-разрядная программа, вызывающая C:\Windows\System32, эмулятор перенаправит путь к C:\Windows\SysWOW64. То есть для запуска 32-битных программ в 64-битной Windows используется эмулятор, чтобы была надлежащая обратная совместимость и чтобы не было ошибок при вызове DLL-файлов.
Прочитайте: что такое папка FOUND.000?
Папка Sysnative в 64-разрядной версии Windows
В некоторых случаях для 32-разрядной программы или приложения может потребоваться 64-разрядная библиотека DLL. В этом случае вам придется использовать папку перенаправления Sysnative. Вы можете рассматривать SysNative как виртуальную папку и псевдоним, указывающий на папку System32. Его физически не существует в вашей системе как такового.
Поэтому, если вашей 32-разрядной программе требуется доступ к 64-разрядной библиотеке DLL, не используйте C:\Windows\System32, поскольку эмулятор 32-разрядной программы перенесет ее в 32-разрядную Папка DLL с именем SysWOW64. Вместо этого используйте C:\Windows\SysNative в качестве пути к программе DLL. Использование Sysnative в пути перенаправит его в папку System32 вместо папки SysWOW64.
Если вы откроете Проводник Windows, вы не найдете папку Sysnative в C:\Windows. Даже если вы установите параметры папки для отображения скрытых и системных папок. Это связано с тем, что Windows File Explorer является 64-разрядной программой при работе в 64-разрядной версии Windows, а папка Sysnative видна и доступна только из 32-разрядных программ.
- Папки System32 содержат 64-разрядные DLL-файлы.
- SysWOW64 содержит 32-разрядные файлы DLL, и 32-разрядные программы автоматически перенаправляются в эту папку.
- Sysnative – это папка перенаправления, позволяющая 32-разрядным программам вызывать 64-разрядные библиотеки DLL.
Дата: 28 октября 2019 г. Теги: 64-разрядная версия, Папка
Похожие сообщения
Что такое папка WpSystem? Безопасно ли его удалять?
Как восстановить предыдущие окна папки при входе в систему в Windows 11/10
Папка System32 открывается автоматически при запуске в Windows 11/10
сообщить об этом объявлении
В этой статье мы объяснили, что в 64-битной Windows папка System32 предназначена для 64-битных двоичных файлов (файлы DLL и т. д.), а папка SysWOW64 предназначена для 32-битных файлов. бинарные файлы. В статье мы также объяснили, что если 32-разрядное приложение включает имя папки «\System32» в путь к папке, система автоматически выполняет перенаправление в папку SysWOW64. Это сделано для предотвращения проблем совместимости, когда приложения компилируются в 64-битные исполняемые файлы.
Но если 32-битному приложению действительно нужен доступ к 64-битной папке System32 в 64-битной Windows; Является ли это возможным? Ответ да, это возможно, и в этой статье мы покажем вам, как это можно сделать.
Реклама
Папка «Sysnative» невидима в проводнике Windows.
Если вы запустите проводник Windows и откроете папку Windows на жестком диске, вы можете заметить, что папка Sysnative не отображается. Основная причина этого заключается в том, что Windows Explorer является 64-битной программой (при запуске в 64-битной Windows), а папка Sysnative видна и доступна только из 32-битного программного обеспечения.Если 64-разрядному программному обеспечению требуется доступ к 64-разрядной системной папке в Windows, единственным вариантом является использование имени папки System32 (например: C:\Windows\System32).
Поддерживается в Windows Vista и более поздних версиях
Виртуальная папка Sysnative поддерживается в Windows Vista и более поздних версиях. Так что он работает также с Windows 7, Windows 8 и Windows 10, но не с Windows XP (если не установлено специальное обновление от Microsoft). Папка Sysnative также доступна в Windows Server 2008, Windows Server 2012, Windows Server 2016 и Windows Server 2019.
Папка Sysnative доступна только в 64-разрядной версии Windows. В 32-битной Windows нет папки Sysnative. Вместо этого доступ к файлам в 32-разрядной системной папке очень прост и интуитивно понятен; имя папки System32 можно использовать в пути к папке, например: C:\Windows\System32.
Дополнительная информация
Мы рекомендуем вам также прочитать эту статью на веб-сайте Microsoft:
Центр разработки для Windows: перенаправитель файловой системы
Упаковка приложений
Как предприятия развертывают свое программное обеспечение Windows
Экономьте время и деньги,
автоматизируя развертывание программного обеспечения
Экономьте время и деньги за счет
автоматической настройки программного обеспечения
Позвольте вашему программному обеспечению восстановиться
самостоятельно в случае поломки без посторонней помощи
Установка программного обеспечения одним щелчком мыши на
любую машину в вашей сети в любом месте
|