Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не находится существующий файл


Олег Г. ©   (2015-04-19 11:07:00) 

Всем привет. Странная проблема. В Windows 7 есть программа - Записки. Она расположена в
C:\Windows\System32\StikyNot.exe. Ни FileExists ни GetFileAttributes не могут найти этот файл. Почему?
if FileExists('C:\Windows\System32\StikyNot.exe') then
 ShowMessage('файл существует')
else
 ShowMessage('файл не найден');

if GetFileAttributes('C:\Windows\System32\StikyNot.exe') <> INVALID_FILE_ATTRIBUTES then
 ShowMessage('Файл существует')
else
 ShowMessage(SysErrorMessage(GetLastError));


Rouse_   (2015-04-21 17:42:00) [1]

Вообще достаточно сказать Wow64DisableWow64FsRedirection, но есть нюанс, который стоит учесть: http://blog.not-a-kernel-guy.com/2009/04/03/482


Kilkennycat   (2015-04-19 22:01:00) [2]

а их не проще искать по типу %альяс_системной_папки% ?


DVM   (2015-04-19 19:58:00) [3]


> Олег Г.   (19.04.15 11:41) [4]

И для 64 бит и для 32 бит программ доступ к папке C:\Windows\System32\ (той что видят 64 бит программы) может быть получен по пути C:\Windows\Sysnative\


Олег Г.   (2015-04-19 13:17:00) [4]

Проблема была в том, что в папке SysWOW64 нет файла StikyNot.exe, соответственно, если вызов FileExists/GetFileAttributes/FindFirstFile из
32-битной программы, то путь к этому файлу найти не удается. Однако, в 64-битной программе все ок (в [4] вызов FindFirstFileW  был сделан из 64-битной программы, поэтому файл нашелся).


Олег Г.   (2015-04-19 11:41:00) [5]

Проверил через FindFirstFile - находит:
hSearch: THandle;
 FileData: WIn32_FIND_DATAW;
begin
 hSearch := FindFirstFileW('C:\Windows\System32\StikyNot.exe', FileData);
 if hSearch <> INVALID_HANDLE_VALUE then
 begin
   ShowMessage(FileData.cFileName);
   Winapi.Windows.FindClose(hSearch);
 end;
end;


Олег Г.   (2015-04-19 11:30:00) [6]

Попробовал скомпилировать 64-битную программу и вызвал обе функции с параметром 'C:\Windows\System32\StikyNot.exe' - результат тот же.


Олег Г.   (2015-04-19 11:27:00) [7]


> junglecat ©   (19.04.15 11:25) [1]
>
> C:\Windows\SysWOW64\StikyNot.exe ?

Так тоже не находит.


junglecat   (2015-04-19 11:25:00) [8]

C:\Windows\SysWOW64\StikyNot.exe ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо