Компиляция 32-битных программ и вызов 64-битных программ в 64-битных системах

Моя система 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

Когда я вызываю команду в этом каталоге, все проходит. Этот каталог отличается на каждом ПК.

Как запустить 32-битную скомпилированную программу для этой команды на каждом ПК

почему бы вам просто не скомпилировать приложение как 64-битное? И не используйте в настоящее время API версии A. Вместо этого используйте версию W, потому что версия A будет внутренне преобразована в W, что было временем ЦП.   —  person Dean Chou    schedule 29.04.2019

Почему вы вообще выполняете cmd.exe? Вместо этого вы должны выполнять bcdedit.exe напрямую. И для этого следует использовать CreateProcess(), а не ShellExecute()   —  person Dean Chou    schedule 29.04.2019

Источник: ledsshop.ru

Стиль жизни - Здоровье!