Winapi 从32位应用程序检查时,Windows 10 bash.exe(linux用户空间)不存在

Winapi 从32位应用程序检查时,Windows 10 bash.exe(linux用户空间)不存在,winapi,windows-10,Winapi,Windows 10,当java或python等32位应用程序试图打开c:\windows\system32\bash.exe时,根本找不到该文件 然而,如果进程是64位的,它就可以完美地工作。我创建了一个简单的C应用程序来检查它是如何工作的 #include <stdio.h> #include <windows.h> int main(int argc, char *argv[]) { char* path; OFSTRUCT junk; if (argc != 2) { prin

当java或python等32位应用程序试图打开
c:\windows\system32\bash.exe
时,根本找不到该文件

然而,如果进程是64位的,它就可以完美地工作。我创建了一个简单的C应用程序来检查它是如何工作的

#include <stdio.h>
#include <windows.h>

int main(int argc, char *argv[]) {
char* path;
OFSTRUCT junk;

if (argc  != 2) {
 printf("provide path to file");
 return 1;
}
path = argv[1];
if( fopen( path, "r")) {
    printf("OK: Runtime reports file exists");
} else {
    printf("ERR: Runtime reports file does not exist");
}

printf("\n");
if (OpenFile(path, &junk,OF_EXIST) != HFILE_ERROR) {
    printf("OK: Win32API reports file exists");
} else {
    printf("ERR: Win32API reports file does not exist");
}

return 0;
#包括
#包括
int main(int argc,char*argv[]){
字符*路径;
结构垃圾;
如果(argc!=2){
printf(“提供文件路径”);
返回1;
}
path=argv[1];
if(fopen(路径“r”)){
printf(“确定:运行时报告文件存在”);
}否则{
printf(“错误:运行时报告文件不存在”);
}
printf(“\n”);
if(存在的OpenFile(路径和垃圾)!=HFILE\u错误){
printf(“确定:Win32API报告文件存在”);
}否则{
printf(“错误:Win32API报告文件不存在”);
}
返回0;
}

它在编译和链接为x64时报告OK/OK,在编译为x86时报告ERR/ERR。怎么可能呢?是否有某种方法可以在Windows中对32位应用程序“隐藏”文件?

这是正在运行的

在大多数情况下,每当32位应用程序尝试访问%windir%\System32时,访问将重定向到%windir%\SysWOW64

因此,您的32位应用程序正在寻找
C:\Windows\SysWOW64\bash.exe
,而这可能并不存在

建议的覆盖方法是:

32位应用程序可以通过将%windir%\Sysnative替换为%windir%\System32来访问本机系统目录。WOW64将Sysnative识别为一个特殊别名,用于指示文件系统不应重定向访问


请注意,也有类似的重定向。

这是正在运行的。请作为评论发布,我将接受。再次感谢。我从来没有想过。现在我将仔细阅读。