我的系统是64位。 我有一个程序调用命令“ bcdedit.exe”
c ++代码:
ShellExecuteA(NULL, "open", "cmd.exe", "/c bcdedit.exe /?", NULL, SW_SHOWNORMAL);
我编译为32位 当我重新运行它时“找不到文件” 当我编译为64位时,运行通过
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位编译程序
答案 0 :(得分:0)
因此,您的代码尝试启动"bcdedit.exe"
。在命令行中,bcdedit.exe
在PATH环境中的唯一位置是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位即可。