dll в SysWOW64 не найдены приложением

Я разрабатываю приложение C #/WPF, которое взаимодействует с USB-устройством, используя некоторые пользовательские 32-разрядные библиотеки DLL. Он разработан как приложение x86 и устанавливается вместе с WIX. Когда я устанавливаю пакет на 64-битный компьютер, программные файлы устанавливаются в Program Files (x86), как я и ожидал.

DLL устанавливаются в SystemFolder с помощью WIX. На 32-битных машинах это означает C: Windows System32. В 64-битной версии они попадают в C: Windows SysWOW64. Это нормально, но когда я запускаю свое приложение, оно не может найти библиотеки DLL (использует их через [DllImport …]).

Итак, как правильно сделать мой найти библиотеки DLL, независимо от того, находятся ли они в System32 или SysWOW64?

ThanksTom


Если это приложение C # по умолчанию, оно автоматически будет 64-битное приложение в 64-битной Windows (C3 по умолчанию 32-битное в 32-битной Windows). Зайдите в свойства проекта в своем приложении для разработки и явно установите 32-битную архитектуру (я думаю; у меня сейчас нет Studio). Если он работает как 64-битное приложение, он не сможет использовать ваши 32-битные библиотеки DLL.


0

Пожалуйста, проверьте, имеет ли dll в приложении ту же версию, что и в папке sys32 или wow64, в зависимости от вашей версии Windows.

Вы можете проверить это по размеру файла dll.

Например: я столкнулся с этой проблемой, потому что мой файл libeay.dll в system32 имел другую dll, чем мой файл libeay.dll в приложении openssl. Я скопировал тот, который находится в sys32, в openssl, и все работает хорошо.

Улучшите этот ответ
ответил 06 янв., 11:35
добавить комментарий |

Пожалуйста, проверьте, имеет ли dll в приложении ту же версию, что и в папке sys32 или wow64, в зависимости от вашей версии Windows.

Вы можете проверить это по размеру файла dll.

Например: я столкнулся с этой проблемой, потому что мой файл libeay.dll в system32 имел другую dll, чем мой libeay. dll в приложении openssl. Я скопировал тот, который находится в sys32, в openssl, и все работает хорошо.



Папки «System32» и «SysWOW64» в Windows: в чём разница?

Детальное рассмотрение системный папок «System32» и «SysWOW64» . За что они соответствуют, в чём разница, и в каких системах присутствуют.Разработка новых современных компьютерных устройств требует программного обеспечения более надёжного исполнения программной оболочки и возможности широкого применения без использования дополнительных настроек и установок.

Содержание:

  • Что представляет собой папка « System32 »?
  • Принципы распределения разно-разрядных библиотек
  • Различия папок «System32» и «SysWOW64 »
  • Что обозначает и как расшифровать значения папки SysWOW64
  • В чем причина несоответствия « 32-разрядная версия » и «System32

Одним из главных достоинств операционной системы «Windows 10» является унификация, которая позволяет использовать ее на различных устройствах: компьютерные и портативные компьютеры, мобильные устройства и т.д. В зависимости от вида компьютерных комплектующих на устройстве пользователя может использоваться 32-разрядная версия или 64-разрядная версия операционной системы «Windows» , что в свою очередь позволяет шире использовать возможности компьютерного персонального устройства.

В этой статье мы постараемся разобраться, чем разница между папками «System32» и «SysWOW64» в операционной системе «Windows» ? Если у вас на компьютере установлена ​​64-разрядная версия «Windows» , то у вас на системном диске «С» присутствуют две отдельные папки, содержащие в себе установленные программы и приложения: «Программные файлы» и «Программные файлы (х86)» . Причём, одно и то же приложение может находиться в той и в другой папке. Но на этом различии c 32-разрядной версией операционной системы «Windows» не заканчивается. У вас также в «Windows» находятся две отдельные системные папки «System32» и «SysWOW64» , в которых хранятся библиотеки «. DLL» и исполняются файлы. И если вы посмотрите внимательно на содержимое папок, обратите внимание, что «System32» содержит в себе огромное количество 64-битных файлов, а «SysWOW64» , наоборот, 32-битных файлов. Абсолютно похожая ситуация и с папками «Программные файлы» и «Программные файлы (х86)» . В первой из них представлены 64-битные файлы, а во второй находятся 32-битные файлы. Какой в ​​этом смысл и для чего это реализовано мы в этой статье и рассмотрим.

Что представляет собой папка «System32» ?

Папка «System32» , находящаяся в системной «Windows» , отвечает за настройки операционной системы. Файлы динамических библиотек «. DLL» , драйверы для работы с реестром. Папка содержит внутренние каталоги, включающие множество приложений, также входящие в состав операционной системы. Благодаря им конечный пользователь может выходить в сеть «Интернет» , обрабатывать электронную почту, воспроизводить музыкальные и видео файлы, создавать и сканировать документы, редактировать изображения и т.д. И хотя большинство файлов, хранящихся здесь, принадлежат системе «Windows» , сторонние программы и приложения также сохраняют свои собственные библиотеки «. DLL-файлы» в этой папки, необходимые им для полноценной и корректной работы.

Поэтому любые программы и приложения, которые вы запускаете на вашем компьютере, независимо от места их расположения и хранения ( будь то системный диск «С» или другой диск), все используют общесистемные файлы динамических библиотек из папок «System32» .

Принципы распределения разно-разрядных библиотек

Как мы уже указывали ранее, только в 64-разрядной версии операционной системы «Windows» присутствуют две схожих папки: «Program Files» и «Program Файлы (x86) ». Основным отличительным признаком папок является тот факт, что они содержат версию 64-разрядных и 32-разрядных программ и файлов соответственно. Причем, 64-разрядные программы, для которых необходимы 64-разрядные динамически подключаемые библиотеки «. DLL-файлы» , расположенные внутри «Program Files» в заглавной системной директории «С» . В свою очередь, 32-разрядные программы, использующие 32-разрядные библиотеки динамической компоновки «. DLL» , расположенные в той же директории «С» в папке «Программные файлы (x86)» .

Корпорация «Microsoft» предпочитает, чтобы 32-разрядное и 64-разрядное программное обеспечение не смешивались в одном месте. Поэтому в директории и созданной разные папки «Программные файлы» , содержит раздельно 64 и 32-разрядное программное обеспечение. Такое разделение позволяет защититься от случаев, когда разные программы используют библиотеку своего разряда, что может вызвать аварию в системе. Благодаря такому подходу, можно быть стопроцентно уверенным, что у вас не возникнет никаких проблем или конфликтов интересов при запуске различных программ и приложений.

Однако не все динамически подключаемые библиотеки «. DLL- файлов » хранятся в системной папке « Program Files ». Многие основные библиотеки динамической компоновки «. DLL» расположены в главной системной папке «Windows» на диске «С» . И туда, соответственно, выгружают свои собственные библиотеки библиотек и некоторые программы. Таким образом, во избежание аварийного завершения работы приложений и программ, операционная система вынуждена также создать в системной папке «Windows» 32-разрядные и 64-разрядные версии папки «System32» .

Различия папок «System32» и «SysWOW64 ™

«System32» и «SysWOW64» — это служебные папки, содержащие системы динамически подключаемых библиотек, предназначенные для каждого корректного запуска 64-разрядных и 32-разрядных приложений и программ в операционной системе «Windows» .

В стандартном 32-разрядном компьютере операционная система по умолчанию сохраняет все соответствующие программы и приложения на системный диск «С» в папке «Program Files» , применяя для корректной работы общесистемную динамическую библиотеку файлов, расположенную по стандартному адресу: «C: Windows System32» .

В 64-разрядном компьютере, как уже говорилось в предыдущем разделе, ситуация обстоит несколько иначе. В своей работе операционная система может использовать как 32-разрядные, так и 64-разрядные программы. И хранит такие программы и динамически подключаемые библиотеки, соответственно, в отдельно предназначенных для них папках. 64-разрядные программы, размещенные по адресу: «C: Program Files» , а ее динамические библиотеки по адресу: «C: Windows System32» . В свою очередь, 32-разрядные программы и библиотеки динамической компоновки «. DLL» сохранены в «C: Program Files (x86)» и «C: Windows SysWOW64» соответственно.

На первый взгляд такое разделение программ по папкам выглядит несколько необычно. Более привычно было бы связать 32-разрядные файлы в папке с созвучным именем «System32» . Однако такая градация исходит из того, что на ранних компьютерах использовались чипы «Intel 8086» . Исходные чипы были 16-разрядными, но более продвинутые версии стали 32-разрядными. Поэтому «х86» стали относить к 32-разрядной версии. А новую 64-разрядную мощностьуру вместо этого называют «x64» . Такое обозначение вы можете встретить в характеристиках системы компьютера, где разрядности указывают значения «х86» и «х64» . Поэтому получается, что папка «Program Files (x86)» содержит 32-разрядные программы, использующие старую процессора процессора «x86» . А в папке «Program Files» переходят 64-разрядные программы на новой мощности процессора «х64» . А так как папка «System32» системно связана с папкой «Program Files» , поэтому в ней и происходит сохранение динамически подключаемые библиотеки DLL-файлов для 64- разрядных программ.

Все это выглядит несколько запутанным, но нет необходимости заострять на этом дополнительном внимании. Операционная система «Windows» , а также программы и приложения, которые вы используете, автоматически определяют верное место хранения библиотекческой компоновки «. DLL» и верно размещают их в соответствующие папки. Но все же, если вам когда-либо потребоваться вручную вручную принять «. DLL » библиотеки на свой компьютер, чтобы вы могли учитывать такую ​​градацию в зависимости от разрядности операционной системы.

Что обозначает и как расшифровать значение папок SysWOW64

Полное название папки «SysWOW64» состоит из двух сокращений. Первое «Sys» является сокращением от «System» , что значит система или системная папка. Второе сокращение «WOW64» расшифровывается как «Windows-on-Windows 64-bit» , и представляет собой подсистему основной операционной системы «Windows », которая позволяет запускать любые 32-разрядные приложения и программы на всех 64-разрядных версиях « Windows ». Используя встроенный механизм, подсистема автоматически перенаправляет доступ к файлам для обеспечения правильной работы программ.

Например, когда вы устанавливаете 32-разрядную программу в 64-разрядной версии операционной системы «Windows» , и программа пытается установить выполнить в папке: «C: Program Files» , то подсистема «WoW64» перенаправляет программу по адресу: «C: Program Files (x86)» . И, если программа пытается получить доступ к библиотеке динамической компоновки «. DLL» в папке: «C: Windows System32» , то, опять же, подсистема «WoW64» указывает другой путь: «C: Windows SysWOW64» .

Вся описанная процедура выполняется подсистемой автоматически в фоновом режиме. Устанавливаемая программа не определяет, что она работает в 64-разрядной системе операционной системы , что позволяет более старым 32-разрядным программам запускаться без изменений в новых 64-разрядных версиях « Windows ». Подсистема «WOW64» , таким же образом, используя встроенные инструменты, регулирует доступ к разделам реестра, наличие отдельных регистров для каждого вида программ.

В чем причина несоответствия «32-разрядная версия» и «System32

Постараемся рассмотреть этот вопрос более подробно. Как уже было сказано ранее, используемые 32-разрядные приложения и программы были системно запрограммированы в папке «Program Files» , и размещение своих динамически подключаемых библиотек «. файлов » в каталог: « C: Windows System32 ». С разработкой более совершенных систем на базе процессоров «х64» данные папки стали применять для новых программ и динамических библиотек «. DLL-файлы» 64-разрядных версий «Windows» .

Разработчики операционной системы «Windows» рассудили, что переходить на новые каталоги для файлов подключаемых библиотек не смысла и оставить папку «System32» в стандартном каталоге системной библиотеки. Поэтому туда и идет сохранение библиотек динамической компоновки «. DLL» в 64-разрядных версиях «Windows» . Использование 32-разрядных программ достаточно широко, поэтому была предоставлена ​​подсистема «WoW64» , которая благодаря своему инструменту перенаправляет 32-разрядные файлы подключаемых библиотек «. DLL» в новый каталог «SysWOW64» .

Таким образом получается, что 32-разрядная версия не имеет отношения к системной папке «System32» . Сейчас такую ​​нестыковку без массового исправления выпущенных программ и приложений уже не получиться, нужно просто всегда использовать данный способ исправить разделение по разрядам в будущем.

Оцените статью
logicle.ru
Добавить комментарий