Вот код c ++ с командой, команда для запуска windows в безопасной загрузке с сетевым режимом и перезапуска. Этот код запускается только в 32-разрядной операционной системе, но в 64-разрядной версии произойдет только перезапуск, но не в режиме безопасной загрузки.
[ПРИМЕЧАНИЕ]: я запускаю приложение в административном режиме.system("bcdedit /set safeboot network > Out.txt");
system("shutdown -r -f -t 0");
а также с ShellExecute()
ShellExecute(0, L"open", L"cmd.exe", L"/C bcdedit /set safeboot network > Out.txt", 0, SW_HIDE);
ShellExecute(0, L"open", L"cmd.exe", L"/C shutdown -r -f -t 0 > Out.txt", 0, SW_HIDE);
Я пробовал вручную, как Open CMD в административном режиме
c:\WINDOWS\system32>bcdedit /set safeboot network
The Operation completed successfully.
c:\WINDOWS\system32>shutdown -r -f -t 0
Вручную это работало (запускается в safeboot), но когда я пробовал через код, Windows перезагружалась, но не в safeboot.
Как заставить это работать как 32-битную, так и 64-битную операционную систему?
Вы запускаете свою программу с системным вызовом как администратор? Я не ожидал бы, что этот вызов будет успешным, если вы этого не сделаете.
> Out.txt
вероятно, недопустимые аргументы. Обратите внимание, что система не является интерпретатором командной оболочки для перенаправления стандарта io. Если вы хотите получить выходные данные, то было бы лучше перенаправить их вручную с помощью CreateProcess или какой-либо оболочки, такой как boost.Process.
Выполняю программу на 64
бит машина. bcdedit.exe
файл существует в C:\Windows\System32
Хотя C:\Windows\System32
находится в системном пути, в x86
Процесс подлежит Перенаправитель файловой системы. Который означает, что C:\Windows\System32
на самом деле решает C:\Windows\SysWOW64
Здесь нет 32
битовая версия bcdedit.exe в C:\Windows\SysWOW64
Решение состоит в том, чтобы изменить цель AnyCPU
или же x64.