Sysnative что это за папка Windows 10

Обновлено: 03.07.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, поэтому вам придется настроить его для выбранного вами языка. Но общая идея остается прежней:

  1. Проверьте наличие \Windows\SysWOW64
  2. Если каталог существует, вы работаете в 64-разрядной версии Windows, поэтому вызовите команду, указав полный путь \Windows\sysnative
  3. Если каталог не существует, значит, вы работаете в 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


< /p>

В некоторых случаях для 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-разрядных программ.

  1. Папки System32 содержат 64-разрядные DLL-файлы.
  2. SysWOW64 содержит 32-разрядные файлы DLL, и 32-разрядные программы автоматически перенаправляются в эту папку.
  3. Sysnative – это папка перенаправления, позволяющая 32-разрядным программам вызывать 64-разрядные библиотеки DLL.

Дата: 28 октября 2019 г. Теги: 64-разрядная версия, Папка

Похожие сообщения

 Что такое папка WpSystem

Что такое папка WpSystem? Безопасно ли его удалять?

Как восстановить предыдущие окна папки при входе в систему в Windows 11/10

Папка System32 открывается автоматически при запуске

Папка 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

Экономьте время и деньги,
автоматизируя развертывание программного обеспечения

Экономьте время и деньги за счет
автоматической настройки программного обеспечения

Позвольте вашему программному обеспечению восстановиться
самостоятельно в случае поломки без посторонней помощи

Установка программного обеспечения одним щелчком мыши на
любую машину в вашей сети в любом месте



Почему пакетные приложения
Упаковка дает результат

  • Простые обновления программного обеспечения
  • Сократить поддержку службы поддержки
  • Поддерживать согласованность программного обеспечения
  • Уменьшение числа сбоев программного обеспечения


Взаимодействие
Мы можем упаковать

  • Фиксированная цена (вне сайта)
  • Время и материал
  • На месте вместе с вашим персоналом
  • BAU или на основе проекта
< br />


Развертывание
Развертывание пакетов в

  • Рабочие столы Windows
  • Ноутбуки с Windows
  • Серверы Citrix
  • Удаленные компьютеры

Что такое папка Sysnative?

С выпуском 64-разрядной версии Windows 7 в обычное размещение папок в каталоге Windows были внесены небольшие изменения. Две новые папки включены в 64-разрядную версию Windows 7, Windows 8 и Windows 10. Это папки Sysnative и SysWOW64. Это только в 64-битной винде. Если вы запустите 32-битную Windows на 64-битной машине, вы их не увидите. Вы также не увидите их при запуске 32-разрядной версии Windows на 32-разрядной машине.

В 64-разрядной версии Windows папка System32 предназначена для 64-разрядных двоичных файлов (файлы DLL и т. д.), а папка SysWOW64 — для 32-разрядных двоичных файлов. Если 32-разрядное приложение включает имя папки «\System32» в путь к папке, система автоматически выполняет перенаправление в папку SysWOW64. Это сделано для предотвращения проблем совместимости, когда приложения компилируются в 64-разрядные исполняемые файлы.

Но если 32-битному приложению действительно нужен доступ к 64-битной папке System32 в 64-битной Windows; это возможно?

Ну, получить доступ к 64-битной папке System32 из 32-битного приложения, просто вставив "\System32" в путь к папке, невозможно. Как упоминалось выше, перенаправление в папку SysWOW64 выполняется системой автоматически, если вы попытаетесь это сделать. Но вместо этого можно использовать другое имя папки: Sysnative.

Sysnative — это виртуальная папка, специальный псевдоним, который можно использовать для доступа к 64-разрядной папке System32 из 32-разрядного приложения или сценария. Если вы, например, укажете путь к этой папке в исходном коде вашего приложения:

C:\Windows\Sysnative

фактически используется следующий путь к папке:

C:\Windows\System32

Использование папки Sysnative поможет вам получить доступ к 64-разрядным инструментам из 32-разрядного кода.

Некоторые инструменты в 64-разрядной версии Windows существуют только в 64-разрядной версии; нет 32-битной версии. Некоторые из этих инструментов находятся в папке 64-разрядной версии System32.

Одним из примеров является средство nbtstat, которое используется для устранения проблем с разрешением имен NetBIOS. Если вы попытаетесь запустить инструмент nbtstat из 32-битного кода (например, из приложения или сценария) и использовать путь, например C:\Windows\System32, вы получите сообщение "Файл не найден". " ошибка. Файл не может быть найден; хотя проводник Windows показывает, что файл программы nbtstat на самом деле находится в папке C:\Windows\System32.

Решение состоит в том, чтобы включить виртуальную папку Sysnative в путь к папке, когда вы хотите запустить инструмент (из вашей 32-разрядной программы/скрипта):

Читайте также: