2

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 企业版

感谢和问候苏尼尔

4

1 回答 1

4

它不起作用,因为您的应用程序是 32 位的,并且受到File System Redirector的影响。您的应用程序没有查看,C:\Windows\System32而是被重定向到C:\Windows\SysWow64.

notepad.exe存在于System32SysWow64中,但telnet.exe只存在于 中System32。因此,您的应用程序在搜索路径时找不到它。

您可以通过调用Wow64DisasbleWow64FsRedirection为您的应用程序禁用此行为。但请注意文档链接中的警告,这些警告表明只能暂时禁用然后重新启用。

于 2013-11-12T19:33:10.950 回答