Я пытаюсь перечислить все файлы в Windows 7 в C: \ Windows \ System32 \ oobe \ info \ Backgrounds, вызвав следующую строку:
const string logonScreenBackgroundPath = "C:\\Windows\\System32\\oobe\\info\\Backgrounds";
DirectoryInfo dInfo = new DirectoryInfo(logonScreenBackgroundPath);
string[] backgroundFiles = Directory.GetFiles(logonScreenBackgroundPath);
Однако я получаю исключение при вызове GetFiles: не удалось найти часть пути 'C: \ Windows \ System32 \ oobe \ info \ Backgrounds
Я проверил, что папка существует и имеет файлы, я перешел к ней в командной строке, и все хорошо, но вызов c # не удался.
Вызов GetFiles на C: \ Windows \ System32 \ oobe \ работает нормально. Ничто не отличается в том, что атрибуты папок идут между \ oobe и \ info.
После дальнейшего изучения это выглядит как 64-битная проблема. Когда я строю свой проект для AnyCpu, папка найдена без проблем. Проблема в том, что мой проект должен компилироваться для x86, а не AnyCpu из-за зависимостей.
РЕШЕНИЕ:
Похоже, это известная проблема, и MS выпустила исправление для нее. Проблема связана с перенаправлением файловой системы.
Теперь я отключаю перенаправление в вызывающем потоке следующим образом:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
IntPtr ptr = new IntPtr();
bool isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr);