Вопросы

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

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

Вставьте новую пару значений ключа внутрь и массива объектов, но значение создается axios.get

admin

как использовать команды cmd для двух разных учетных записей

admin

Сохранение хешированного пароля в Sequelize противоречит моему простому желанию сохранить хешированный пароль

admin

Symfony: ошибка установки пакета администрирования sonata

admin

Найдите будильник с именем в Cloudwatch

admin

Закрытие нового окна консоли, запущенного из пакетного сценария, предлагает завершить сценарий

admin