Вопросы

Компиляция 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

Читать:
Выполнение кода из ОЗУ в STM32

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

Похожие записи

Добавить новый столбец в кадр данных состояния на основе данных другого столбца

admin

Python: JSON не читает и символ

admin

Запись в firestore в облачной функции firebase меняет мои даты

admin

Как заставить все задачи upstream_failed повторить попытку после того, как состояние их родителей изменилось на успешное в Airflow?

admin

Как сообщить JavaScript, что моя переменная является массивом, а не строкой?

admin

Импорт s3 Bucket в шаблон Cloudformation

admin