2013-11-12 6 views
2

API-интерфейс API Search API Win32 не может найти двоичный путь «telnet.exe», даже если он присутствует в system32.win32 API SearchPath не работает

Однако, когда я сделал поиск для notepad.exe, с тем же кодом он возвращает путь к файлу. Меня озадачивает то, что и notepad.exe, и telnet.exe находятся в одном каталоге i.e C: \ windows \ system32.

Это код, который я написал

char path[MAX_PATH] = {0}; 
LPSTR* ptr = NULL; 

DWORD dwRet = SearchPathA(NULL, "telnet.exe", 
    NULL, MAX_PATH, (LPSTR)path, ptr); 

Это всегда возвращает 0, а GetLastError 2 (Файл не найден)

Любая идея, что происходит здесь?

Я использую Windows 2008 R2 Enterprise издание на x64 машине

Спасибо & С уважением Сунил

ответ

4

Это не работает, потому что приложение 32 бит и в настоящее время зависит от File System Redirector. Ваша заявка не найдена в C:\Windows\System32, но вместо этого перенаправляется на C:\Windows\SysWow64.

notepad.exe существует как System32 и SysWow64, но telnet.exe существует только в System32. Таким образом, приложение не находит его при поиске пути.

Вы можете отключить эту ситуацию для своего приложения, позвонив по телефону Wow64DisasbleWow64FsRedirection. Но обратите внимание на предупреждения в ссылках на документацию, которые указывают, что это нужно временно отключать, а затем снова включать.

+0

* перспективный *, нет * блокировка *. –

+0

Или передайте непереадресованную папку System32 в первом параметре 'SearchPath()', используя псевдоним 'sysnative', который [перенаправитель файловой системы] (http://msdn.microsoft.com/en-us/library/ windows/desktop/aa384187.aspx) не перенаправляет: «32-разрядные приложения могут получить доступ к исходному системному каталогу, заменив% windir% \ Sysnative для% windir% \ System32. WOW64 распознает Sysnative как специальный псевдоним, используемый для указания того, что файл система не должна перенаправлять доступ. Этот механизм является гибким и простым в использовании, поэтому рекомендуемым механизмом является обход перенаправления файловой системы ». –