Файл C#.Exists возвращает false, файл существует

использование VS 15, C# с .Net 4.5.2
Компьютер находится в рекламной сети, с именем объявления "AD".
Эта проблема возникает с правами обычного пользователя AD, правами администратора AD и правами локального администратора. Не имеет значения, какие права получает программа, возникает та же проблема.

наш тестовый файл "C:/windows/system32/conhost.exe".
Файл выше существует, он очень существует. Я вижу это с помощью explorer.

это файл в исследователь:
enter image description here

это свойства файла:
enter image description here

вы можете видеть, что это там, не так ли?
Следующая команда cmd проверяет, существует ли файл:

IF EXIST "C:windowssystem32conhost.exe" (echo does exist) ELSE (echo doesnt exist)

возвращает "существует

следующий код C# проверяет, существует ли файл:

FileInfo file = new FileInfo("C:/windows/system32/conhost.exe");
MessageBox.Show(file.Exists + "");

это возвращает "False".

этот код также возвращает "False":

MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");

этот код также не находит его:

foreach (string file in Directory.GetFiles("C:/windows/system32/"))
{
    //conhost is NEVER mentioned, like it doesn't exist
}

этот код также не находит его:

foreach (string file in Directory.EnumerateFiles("C:/windows/system32/"))
{
    //conhost is NEVER mentioned, like it doesn't exist
}

Ложь, Ложь, Ложь:

MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");
MessageBox.Show(File.Exists("C:windowssystem32conhost.exe") + "");
MessageBox.Show(File.Exists(@"C:windowssystem32conhost.exe") + "");

что я делаю не так?
Дополнительное примечание: Я скопировал conhost в C:conhost - ... exe, а моя программа может найти без проблем. Моя программа также находит другие файлы в system32, просто не conhost и несколько других. Например, он находит "подключиться.dll", который находится в system32, так что это не разрешение на чтение каталога.
Дополнительные примечания: conhost.exe и подключиться.DLL имеет те же атрибуты безопасности (вкладка Безопасность в свойствах файла).

2 ответов


Если вы используете систему x64, у вас будет другое содержимое c:\Windows\System32 каталог для x86 и x64 приложений. Убедитесь, что вы используете ту же архитектуру, что и пакетный файл, и приложение C#.


в документации MSDN для Система.ИО.Файл.Существует (путь), в нем говорится:

Если вызывающий абонент делает не имеют достаточных разрешений для чтения указанного файла, нет исключение и метод возвращает значение false, независимо от существование пути.

по этой причине мы можем с уверенностью предположить, что ваше приложение не имеет доступа для чтения этого конкретного файла. Проверьте параметры безопасности и предоставьте доступ для чтения, если нет уже сделал.

создайте приложение (в режиме выпуска) и запустите его от имени администратора.