win32 API SearchPath API无法找到“telnet.exe”二进制路径,即使它存在于system32中。
但是当我搜索notepad.exe时,使用相同的代码返回文件路径。这里让我感到困惑的是notepad.exe和telnet.exe都在同一个目录中,即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(找不到文件)
知道这里发生了什么吗?
我在x64机器上使用Windows 2008 R2企业版
谢谢&问候 苏尼
答案 0 :(得分:4)
它不起作用,因为你的应用程序是32位并受File System Redirector的影响。您的应用程序没有查看C:\Windows\System32
,而是被重定向到C:\Windows\SysWow64
。
notepad.exe
同时存在于System32
和SysWow64
,但telnet.exe
仅存在于System32
中。因此,当应用程序在搜索路径时找不到它。
您可以通过调用Wow64DisasbleWow64FsRedirection为您的应用程序禁用此行为。但请注意文档链接中的警告,表明只应暂时禁用此警告,然后重新启用。