win32 API 搜索路径失败
Posted
技术标签:
【中文标题】win32 API 搜索路径失败【英文标题】:win32 API SearchPath fails 【发布时间】:2013-11-12 19:01:42 【问题描述】: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 企业版
感谢和问候 苏尼尔
【问题讨论】:
【参考方案1】:它不起作用,因为您的应用程序是 32 位的并且受到File System Redirector 的影响。您的应用程序不在C:\Windows\System32
中查找,而是被重定向到C:\Windows\SysWow64
。
notepad.exe
存在于System32
和SysWow64
中,但telnet.exe
仅存在于System32
中。因此,您的应用程序在搜索路径时找不到它。
您可以通过调用Wow64DisasbleWow64FsRedirection 为您的应用程序禁用此行为。但请注意文档链接中的警告,这些警告表明只能暂时禁用此功能,然后再重新启用。
【讨论】:
看起来,而不是锁定。 或者使用sysnative
别名传递SearchPath()
第一个参数中未重定向的System32文件夹,file system redirector不会重定向:“32位应用程序可以访问本机系统通过将 %windir%\Sysnative 替换为 %windir%\System32 的目录。WOW64 将 Sysnative 识别为特殊别名,用于指示文件系统不应重定向访问。这种机制灵活且易于使用,因此,推荐绕过文件系统重定向的机制。”以上是关于win32 API 搜索路径失败的主要内容,如果未能解决你的问题,请参考以下文章
解决 win32-x64-64_binding.node 下载失败
解决 win32-x64-64_binding.node 下载失败
CreateProcess失败;代码193.%/不是有效的win32应用程序
[python win32使用Windows Installer API失败,但perl正常-我在python中做错了什么?