【问题标题】:Test-Path issue测试路径问题
【发布时间】:2016-06-04 13:25:14
【问题描述】:

为什么Test-Path -Path $folder -PathType Container返回true,但是文件夹不存在? 路径是:

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

ISE x86 和 ISE 中的代码相同,但结果不同

【问题讨论】:

  • 即使您有明确的完整路径,system32 是否会隐藏在 64 位进程中?我的 powershell 东西一直只在 C:\Windows\SysWOW64 中。所以我总是会得到与你相反的结果。
  • 是的,文件夹在SysWow64下但是为什么ISE x86控制台显示为真而ISE控制台显示为假?

标签: powershell powershell-3.0 windows-server-2012


【解决方案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\Modules\MyCompany\Modules

被重定向到 SysWow64 文件夹。

ISE 控制台以 x64 运行,因此将在 System 32 中查找,但找不到此文件夹,但该文件夹是在 ISE x86 控制台中创建的,该控制台将文件夹保存在 SysWOW64 下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    相关资源
    最近更新 更多