【问题标题】:Windows service running as system cannot access C:\users\作为系统运行的 Windows 服务无法访问 C:\users\
【发布时间】:2012-02-01 02:20:27
【问题描述】:

我安装了一个作为本地系统帐户的 Windows 服务,有时它会在机器上构建一个目录列表。它在 c:\users... 目录下的 Windows 7 上失败。我检查了这些文件夹,它们似乎受到系统帐户的完全控制。为什么我无法访问这些目录?

System.UnauthorizedAccessException: Access to the path 'C:\Users\Public\Documents\My         Videos' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal,   String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption)
at System.IO.Directory.GetDirectories(String path, String searchPattern, SearchOption searchOption)
at LS.Core.Backup.DirectoryMapper.GetDirectories(String SeedDir, Int32 Count)

更新:

有关详细信息,请参阅下面的答案,但我也发布了我用来解决此问题的课程。见GitHub Gist - DirectoryHelper

【问题讨论】:

  • InnerException吗?请发布完整的异常跟踪。另外,你在调用什么函数?你的程序有什么特权?
  • 我已经添加了堆栈跟踪,不幸的是没有内部异常。我以 SYSTEM 帐户运行,所以不应该让我访问整个驱动器吗?
  • 如果异常包含HResult 字段,请查看它是什么。从我从 MSDN 文档 (msdn.microsoft.com/en-us/library/system.exception.hresult.aspx) 中可以看出,它应该与本机 Windows 调用将返回的 HRESULT 相同。也正如 Grant H. 所说,尝试 Process Monitor。如果没有设置HResult,你可以从进程监视器中看到代码。

标签: c#


【解决方案1】:

当你在我的帖子上发布一个想法时,我想我会回报你的。是的,我知道您已经找到了解决方案....

我使用了 MSDN 中这种迭代搜索的变体 - Iterate Through a Directory Tree

如果您希望访问未经授权的文件或文件夹,这允许您在错误处理中提示提升权限。

希望对你有帮助。

干杯,

【讨论】:

    【解决方案2】:

    所以我最终自己回答了这个问题。问题在于使用Directory.GetFiles()Directory.GetDirectories()。在 Windows 7 中,使用这些方法时,您将在 C:\Users... 树下搜索时遇到连接点和/或硬链接,因为添加了连接点以向后兼容 XP 生成应用程序。当您尝试读取其中一个连接点时,MS 会触发 UnauthorizedAccessException(以防止这些连接点排列中可能出现的无限循环),并导致整个 GetFiles()GetDirectories() 调用失败,不返回任何内容。作为一种解决方案,我实现了http://tom-shelton.net/index.php/2010/01/02/using-extension-methods-and-the-win32-api-to-efficiently-enumerate-the-file-system/ 的一个变体,它将一次迭代一个文件,允许您在遇到一个路口并继续前进时处理异常。相当迟钝的问题,希望对某人有所帮助。

    【讨论】:

      【解决方案3】:

      使用来自 Sysinternals (Microsoft Technet) 的 Process Monitor 等工具查看更具体的错误详细信息。该信息可能具有误导性; “拒绝访问”错误的一些常见情况包括打开的文件和防病毒软件。

      【讨论】:

      • 谢谢,但是这台机器没有防病毒功能,它对 c:\users\ 分支下的所有目录都执行此操作,所以这似乎是某种形式的安全问题。
      猜你喜欢
      • 2010-10-24
      • 1970-01-01
      • 2017-02-09
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多