作为系统运行的Windows服务无法访问C:\ users \

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

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

当你在我的post上发表一个想法时,我想我会回报你的帮助。 是的我知道你已经找到了解决方案….

我在MSDN中使用了这种迭代搜索的变体 – 通过目录树迭代

如果您希望访问未经授权的文件或文件夹,则可以在error handling中提示提升权限。

希望能帮助到你。

干杯,

所以我最终自己回答了这个问题。 问题在于使用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 / ,它将一次迭代一个文件,允许您在命中交汇点时继续处理exception。 非常迟钝的问题,希望它可以帮助某人。

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