在64位系统上编译32位程序并调用64位程序

问题描述 投票:0回答:1

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

c ++代码:

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

我编译为32位当我运行它“file not find”当我编译为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
1个回答
0
投票

所以你的代码试图启动"bcdedit.exe"。从命令行,您的PATH环境中bcdedit.exe的唯一位置是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)。

你可能需要这样的东西:How to retrieve correct path of either system32 or SysWOW64?

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

© www.soinside.com 2019 - 2024. All rights reserved.