简体   繁体   中英

Compiling 32-bit programs and calling 64-bit programs on 64-bit systems

My system is 64 bit. I have a program calls a command "bcdedit.exe"

c++ code:

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

I compiled to 32 bit When I run it back "file not find" When I compiled to 64 bit, run passed

The same problem exists in go go code:

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

I found "bcdedit.exe" in another directory:

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

When I call the command in this directory, all passed This directory is different on every PC

How do I run the 32-bit compiled program for this command on each PC

So your code attempts to launch "bcdedit.exe" . From the command line, the only location of bcdedit.exe in your PATH environment is the Windows System directory, c:\\Windows\\System32 .

When you compile your code as 32-bit and run it on a 64-bit system, your process's view of the file system will change. Namely, the process view of the C:\\Windows\\System32 is replaced by the contents of C:\\Windows\\SysWOW64 - where only 32-bit DLLs and EXEs are located. However.... There is no 32-bit version bcdedit.exe located in this folder. (If you want to simulate this, go run c:\\windows\\syswow64\\cmd.exe - you won't be able to find bcdedit.exe in the c:\\windows\\system32 folder anymore).

You probably need something like this: How to retrieve correct path of either system32 or SysWOW64?

Format your ShellExecute function to directly specificy the SysWow64 path for both bcdedit.exe and cmd.exe. Or as others have suggested, just compile for 64-bit.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM