繁体   English   中英

DirectoryInfo.GetFiles方法不返回任何文件

[英]DirectoryInfo.GetFiles method not returning any files

我正在尝试返回%WINDIR%\\System32\\inetsrv\\config中存在的.config文件。

为此,我使用以下代码:

DirectoryInfo configFolder = new DirectoryInfo(Environment.ExpandEnvironmentVariables("%WINDIR%") + @"\System32\inetsrv\");
FileInfo[] configFiles = configFolder.GetFiles("*.config");

这会将零个对象返回到configFiles 如果我使用另一个文件夹(例如D:\\ DropBox),效果很好!

这段代码曾经工作过,有什么变化吗?

另外, FileInfo fi = new FileInfo(Path.Combine(configPath, "applicationHost.config")); 返回确定,但是fi.Length抛出FileNotFoundException

似乎它必须是权限,但是在代码运行时我看不到如何检查我是否具有权限!

您将需要以提升的特权来运行代码,因为您正试图访问系统文件夹。

如果使用Windows资源管理器->属性->安全性进行检查,您会发现该文件夹限制了对SYSTEM,Administrators和TrustedInstaller的访问(不知道最后一个文件夹来自何处,可能也仅位于我的计算机上。) )。

您可以在App.config文件中配置执行级别,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>

您可以在此处找到文章: 如何强制C#应用程序仅以Windows中的管理员身份运行

由于我不是开发人员,并且只涉猎代码(主要是为自己编写管理工具),因此我想知道是否有人可以解释或将我指向正确的答案位置?

基本上,我从别人的项目中获得了一些有效的代码,并将其复制到我自己的项目中。 我敢肯定它以前能用,但不能100%确定。 当时我正在运行x86 Windows,但是现在使用x64。

旧代码仍然有效,因此我经历了复制设置并最终找到解决方案。

ProjectBuild properties中的“ Platform Target”设置为Any CPU (来自x86)可以正常工作。 将它设置为x64也可以,但是我认为这是一些安全性。

无论如何,问题解决了! 感谢您的所有建议!

这不是权限问题,但实际上与幕后发生的SysWow64方向有关。 C:\\ windows \\ system32被隐式重定向到C:\\ windows \\ syswow64。 这就是为什么更改构建体系结构可以解决此问题的原因。 任何构建体系结构都可以使用的替代方法是禁用重定向:

[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);

IntPtr ptr = new IntPtr();
Wow64DisableWow64FsRedirection(ref ptr);

请注意,这是每个线程的设置,因此在使用GetFiles()之前必须在正确的线程中运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM