Система не может найти указанный путь - PullRequest
4 голосов
/ 08 января 2012

Я пытаюсь вычислить хэш sha1 для некоторых файлов из папки% system% \ drivers \, используя C #. Я знаю, что файлы находятся в точном месте, но когда я использую

FILE.Exists("c:\\Windows\\System32\\Drivers\\1394ohci.sys") 

всегда возвращается false.

C:\Users\administrator>dir c:\Windows\System32\drivers\1394ohci.sys
 Volume in drive C has no label.
 Volume Serial Number is 5A4F-1E60

 Directory of c:\Windows\System32\drivers

11/21/2010  08:53 AM           229,888 1394ohci.sys
               1 File(s)        229,888 bytes
               0 Dir(s)  19,521,245,184 bytes free


C:\Users\administrator>fciv -sha1 c:\Windows\system32\drivers\1394ohci.sys
//
// File Checksum Integrity Verifier version 2.05.
//
c:\windows\system32\drivers\1394ohci.sys\*
        Error msg  : The system cannot find the path specified.
        Error code : 3

Я даже попробовал fciv.exe для файла, и он также генерирует тот же вывод. Я попытался запустить команду от имени администратора, но это не помогло.

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

Ценю вашу помощь. Спасибо,

Ответы [ 4 ]

4 голосов
/ 08 января 2012

Если я правильно понимаю вашу проблему, тогда вам нужно посмотреть File System Redirector

Каталог% windir% \ System32 - reserved для 64-разрядных приложений. Большинство имен файлов DLL не были изменены, когда 64-разрядные версии DLL , поэтому 32-битные версии DLL хранятся в другой каталог . WOW64 скрывает эту разницу, используя файл системный редиректор.

В большинстве случаев всякий раз, когда 32-битное приложение пытается получить доступ % windir% \ System32, доступ перенаправляется на% windir% \ SysWOW64 . Доступ к% windir% \ lastgood \ system32 перенаправлен на % Windir% \ lastgood \ SysWOW64. Доступ к% windir% \ regedit.exe есть перенаправлено в% windir% \ SysWOW64 \ regedit.exe.

Также есть небольшой образец внизу страницы, если вы можете попробовать это

string system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32");
if(Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
{
// For 32-bit processes on 64-bit systems, %windir%\system32 folder
// can only be accessed by specifying %windir%\sysnative folder.
system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative");
}
0 голосов
/ 17 апреля 2016

Как уже упоминалось, это редиректор файловой системы на работе. Обходной путь должен заменить system32 на sysnative в пути к файлу.

Это тоже сводило меня с ума, и потребовалось слишком много работы, чтобы найти простой обходной путь. Я продолжал приземляться на страницах с продвинутыми сценариями и сложными, неясными касательно решениями. Поэтому я решил поделиться «легким режимом».

0 голосов
/ 08 января 2012

С http://msdn.microsoft.com/en-us/library/system.io.file.exists.aspx:

Метод Exists возвращает значение false, если возникает какая-либо ошибка при попытке определить, существует ли указанный файл.Это может произойти в ситуациях, когда возникают исключения, такие как передача имени файла с недопустимыми символами или слишком большим количеством символов, сбойный или отсутствующий диск или если вызывающая сторона не имеет разрешения на чтение файла.

0 голосов
/ 08 января 2012

Запустите вашу программу в режиме администратора.

...