【发布时间】: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