windows - win32 API SearchPath 失败

标签 windows winapi visual-c++ win32-process

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

感谢和问候 苏尼尔

最佳答案

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

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

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

关于windows - win32 API SearchPath 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19937701/

相关文章:

windows - 在 Windows 命令行中自动化 cygwin 命令(最终在 MsBuild 中)

windows - 当可以使用 __ImageBase 或 GetModuleHandleEx() 检索时,为什么框架存储自己的 HMODULE?

c - 在 Windows 7 x64 上使用 C 和 MinGW 访问虚拟串行端口

visual-c++ - MFC画线

visual-c++ - Visual c++ OpenCV 2.1 contains()

c++ - 如何使用函数指针或虚函数来允许另一个程序员定义函数的实现?

windows - 如何建立PyQT项目?

wpf - Windows 服务与 WPF 管理工具

windows - 如何从 PreTranslateMessage(MSG*pMsg) 中的 WM_KEYDOWN 中提取字符

c++ - 在 Windows 中创建 C++ 非阻塞计时器