【问题标题】:Why is SysWOW64 reported as System32?为什么 SysWOW64 报告为 System32?
【发布时间】:2015-05-10 15:55:15
【问题描述】:

我正在测试 Windows 服务。服务代码在尝试删除我在%windir%\SysWOW64 中创建的只读文件时失败,但记录的异常是:

访问路径 'C:\Windows\system32\CanvasImages\62230.jpg' 是 拒绝。

我知道 64 位 Windows 有很多关于这两个文件夹的技巧,并且了解一点,但是一些准确的异常信息会很好。

【问题讨论】:

  • “我在%windir%\SysWOW64创建的文件” - 为什么?你为什么写%windir%?你为什么写SysWOW64?究竟是什么代码引发了该异常?您还希望看到什么其他例外情况?有关正在发生的事情的更多信息,请参阅MSDN: File System Redirector
  • 因为支持在64位操作系统上运行32位代码的模拟器比较擅长模拟32位操作系统。直到目录的名称。 c:\windows\syswow64 和 c:\program files (x86) 的名称都由文件系统重定向器映射。如果您想在该消息中看到“syswow64”,那么您必须在项目的“属性 + 构建”选项卡中移除抖动强制。
  • @CodeCaster 感谢您的链接。我的服务从其当前目录写入和读取文件。为了测试异常处理,我在该目录中创建了一个只读文件以强制异常。我宁愿看到的例外是:Access to the path 'C:\Windows\SysWOW64\CanvasImages\62230.jpg' is denied. 我已经添加了代码以将服务的当前目录设置为其代码库目录,即我编译的服务 exe 所在的位置。
  • @ProfK - 您不应该将您的服务安装到 SysWOW64。您应该将其安装到 Program Files 或 Program Files (x86)。事实上,任何系统文件夹中几乎没有任何内容。
  • @ErikFunkenbusch 该服务未安装到SysWOW64,但默认情况下它的当前目录设置为该文件夹。服务可执行文件就在我现在想要的位置,在项目的输出文件夹中,即bin\Debug

标签: .net windows-services 64-bit windows-7-x64 syswow64


【解决方案1】:

这有点令人困惑,但 SysWOW64 实际上是 64 位系统的 32 位模拟器。

WOW 代表“Windows on Windows”,最初的 SysWOW 是 32 位 Windows 的 16 位模拟器(应该称为 SysWOW32)。所以 SysWOW64 是 64 位 Windows 的 32 位模拟器。

因此,当您运行 32 位应用程序时,它使用 SysWOW64 来模拟 32 位注册表和 32 位重定向(例如到 Program Files (x86))。

【讨论】:

  • 我假设“返回”到 32 位的重定向会导致异常消息中的文件夹名称?
猜你喜欢
  • 2011-11-07
  • 2018-05-29
  • 2014-11-27
  • 2010-10-31
  • 2013-11-23
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多