Моя система 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
Источник: