2016-06-04 3 views
1

Почему Test-Path -Path $folder -PathType Container возвращает true, но папка не существует? Путь:Проблема тестового пути

C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Modules \ MyCompany \ Modules

же код в ISE x86 и ISE, но разные результаты

enter image description here

enter image description here

+1

Итак, система32 скрыта или скрыта в 64-битном процессе, даже если у вас есть явный полный путь? Мой ресурс powershell всегда был только в C: \ Windows \ SysWOW64. Поэтому я всегда имел бы противоположный результат, который у вас есть. –

+0

Да, папка находится под 'SysWow64'. Но почему консоль ISE x86 показывает true, а ISE-консоль - false? – Legends

ответ

1

Ответ here

Выдержки:

Папка 'System32' для 64-битных файлов и папка 'Syswow64' для 32-битных файлов

Это может быть несколько запутанный, но папка System32 предназначена для для 64-битных файлов, а папка SysWOW64 предназначена для 32-разрядных файлов.

Это может показаться немного нелогичным, если вы посмотрите на имена папок, но есть объяснение этому. Это связано с совместимостью. Многие разработчики имеют жестко закодированный путь к системной папке в своем исходном коде приложений . Они включили «System32» в папку пути. И чтобы сохранить совместимость, если приложение конвертируется в 64-разрядный код, 64-разрядная системная папка по-прежнему называется System32.

Но как насчет 32-разрядных приложений, которые имеют системный путь жестко закодированы и работают в 64-битной Windows? Как они могут найти новую папку SysWOW64 без изменения кода программы, вы можете подумать.

Ответ в том, что эмулятор перенаправляет звонки в папку System32 в папку SysWOW64 прозрачно, так что даже если папка закодирована в папку System32 (например, C: \ Windows \ System32), эмулятор убедитесь, вместо этого используется папка SysWOW64. Таким же кодом источника , который содержит путь с включенной папкой System32, может быть , скомпилированный как для 32-битного, так и 64-битного кода программы без каких-либо изменений.

Так что помните: • папка SysWOW64 предназначена для 32-битных файлов только • папка System32 предназначена для 64-битных файлов только очень важно, что двоичный файл компилируется в определенной разрядности (32 или 64) установлен в правильную системную папку. В противном случае программа, которую нуждается в файле, не сможет загрузить файл и возможно не будет работать должным образом.

Именно поэтому ISE выход x86 находится в папке SysWow64 и вызов:

C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Модули \ MyCompany \ Модули

перенаправлен в папку SysWow64.

Консоль ISE работает как x64 и поэтому будет выглядеть в Системе 32 и не найдет эту папку, но папка была создана в консоли ISE x86, которая сохраняет папку под SysWOW64.

Смежные вопросы