首页 > 解决方案 > 在 64 位系统上编译 32 位程序和调用 64 位程序

问题描述

我的系统是 64 位的。我有一个程序调用命令“bcdedit.exe”

c++代码:</p>

ShellExecuteA(NULL, "open", "cmd.exe", "/c bcdedit.exe /?", NULL, SW_SHOWNORMAL);

我编译到 32 位当我运行它时“找不到文件”当我编译到 64 位时,运行通过

go go代码中也存在同样的问题:

cmd := exec.Command("cmd.exe","/c","bcdedit.exe /?")
out, err := cmd.CombinedOutput()
if err != nil {
    fmt.Println(err)
}
fmt.Println(string(out))

我在另一个目录中找到了“bcdedit.exe”:

C:\\Windows\\WinSxS\\amd64_microsoft-windows-b..iondata-cmdlinetool_31bf3856ad364e35_10.0.17134.471_none_69b0e05efb5a4702\\bcdedit.exe

当我在这个目录中调用命令时,都通过了这个目录在每台PC上都不一样

如何在每台 PC 上运行此命令的 32 位编译程序

标签: c++go

解决方案


因此,您的代码尝试启动"bcdedit.exe". 在命令行中,bcdedit.exePATH 环境中的唯一位置是 Windows 系统目录,c:\Windows\System32.

当您将代码编译为 32 位并在 64 位系统上运行时,您的进程对文件系统的看法将会改变。即,进程视图C:\Windows\System32被替换为C:\Windows\SysWOW64- 只有 32 位 DLL 和 EXE 所在的内容。但是.... 此文件夹中没有 32 位版本的 bcdedit.exe。(如果你想模拟这个,运行 c:\windows\syswow64\cmd.exe - 你将无法在 c:\windows\system32 文件夹中找到 bcdedit.exe)。

您可能需要这样的东西:如何检索 system32 或 SysWOW64 的正确路径?

格式化您的 ShellExecute 函数以直接指定 bcdedit.exe 和 cmd.exe 的 SysWow64 路径。或者正如其他人建议的那样,只需编译为 64 位。


推荐阅读