【问题标题】:Testing for path in SysWOW64 returns true if path does not exist, but does exist in System32如果路径不存在但在 System32 中存在,则在 SysWOW64 中测试路径返回 true
【发布时间】:2015-09-03 08:00:29
【问题描述】:

注意:我使用的是 64 位系统。

我无法找到有关我当前状况的文章。我使用PowerShell来测试是否存在某个路径:

“C:\Windows\SysWOW64\config\systemprofile\Desktop”

即使 SysWOW64 中不存在 Desktop 文件夹,它也会返回 true。我知道这与我确实有路径有关:

"C:\Windows\System32\config\systemprofile\Desktop"

但我不知道为什么。在上下文中,我正在自动化 Excel 中的一些东西(是的,我知道它不受支持,但使用 Desktop 文件夹一切正常),我想在尝试继续自动化之前测试这两个路径是否存在。

我的问题是,是否有必要测试两条路径?如果我将桌面文件夹放在其中一个路径中,Excel 自动化是否会工作,因为它们似乎以某种方式连接?

我看过 thisthis 的文章,这让我相信是的,但作为一名程序员,我很犹豫将这些东西如此紧密地结合在一起,以防它们在未来发生变化。有没有更优雅的解决方案?

【问题讨论】:

  • 如何测试路径,UAC 是否启用了文件和注册表虚拟化?
  • 我使用 Test-Path cmdlet,“Test-Path C:\Windows\SysWOW64\config\systemprofile\Desktop”。另外,我对“带有文件和注册表虚拟化的 UAC”一无所知,所以我不知道,但我现在会查一下。
  • 这可能是SysWOW64 File System Redirection引起的
  • 是的,问题的 Excel 部分。无论文件夹位于何处,Excel 自动化都应该工作。 SysWOW64 文件系统重定向在后台自动发生。

标签: excel powershell automation system32 syswow64


【解决方案1】:

假设:

C:\Windows\SysWOW64\config\systemprofile\Desktop

存在,但是:

C:\Windows\System32\config\systemprofile\Desktop

没有。

64 位 PowerShell:

Test-Path C:\Windows\SysWOW64\config\systemprofile\Desktop
True

Test-Path C:\Windows\System32\config\systemprofile\Desktop
False

32 位 PowerShell:

Test-Path C:\Windows\SysWOW64\config\systemprofile\Desktop
True

Test-Path C:\Windows\System32\config\systemprofile\Desktop
True

32 位 PowerShell 中的第二个测试从 system32 重定向到 syswow64syswow64 的检查通常不会被重定向。

您声称 Test-Path C:\Windows\SysWOW64\config\systemprofile\Desktop 会返回 true,即使该文件夹不存在。你确定吗?

还有你的 Excel 组件的位数是多少,如果是 32 位,你只需要关心 SysWOW64 路径。

【讨论】:

  • 呵呵,bitness :) 感谢您为我连接这些点!使用在kb.jetreports.com/article/AA-00722/0/… 找到的方法,我看到我正在运行 32 位 excel。
  • 我已经测试了这些组合,我发现您的示例明确正确,并且无法重现我的问题示例。当我试用它时,它在 32 位和 64 位版本的 PowerShell 中都返回 false。无论哪种方式,学习已经发生,您已经很好地回答了我的问题,再次感谢!
猜你喜欢
  • 2021-03-16
  • 1970-01-01
  • 2015-02-19
  • 2017-08-10
  • 1970-01-01
  • 2022-11-27
  • 2018-08-21
  • 2011-03-06
  • 1970-01-01
相关资源
最近更新 更多