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

Моя система 64-битная.У меня есть программа, которая вызывает команду "bcdedit.exe"

c ++ code:

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

Я скомпилировал в 32-битный Когда я запускаю его обратно "файл не найти" Когда я скомпилирован в 64бит, прогон пройден

Та же проблема существует в коде go 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-разрядную скомпилированную программу для этой команды на каждом ПК

1 Ответ

0 голосов
/ 29 апреля 2019

Итак, ваш код пытается запустить "bcdedit.exe". Из командной строки единственное расположение bcdedit.exe в вашей среде PATH - системный каталог Windows, c:\Windows\System32.

Когда вы компилируете свой код как 32-битный и запускаете его в 64-битной системе, представление вашего файла о файловой системе изменится. А именно, представление процесса C:\Windows\System32 заменяется содержимым C:\Windows\SysWOW64 - там, где расположены только 32-битные DLL и EXE-файлы. Однако .... В этой папке нет 32-битной версии bcdedit.exe. (Если вы хотите смоделировать это, запустите c: \ windows \ syswow64 \ cmd.exe - вы больше не сможете найти bcdedit.exe в папке c: \ windows \ system32).

Возможно, вам нужно что-то вроде этого: Как получить правильный путь для system32 или SysWOW64?

Отформатируйте функцию ShellExecute, чтобы указать путь SysWow64 для bcdedit.exe и cmd.exe. Или, как другие предложили, просто скомпилируйте для 64-битной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...