система («bcdedit / set safeboot») не устанавливает безопасную загрузку Windows

Вот код 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-битную операционную систему?

1

Решение

Вы запускаете свою программу с системным вызовом как администратор? Я не ожидал бы, что этот вызов будет успешным, если вы этого не сделаете.

0

Другие решения

> Out.txt вероятно, недопустимые аргументы. Обратите внимание, что система не является интерпретатором командной оболочки для перенаправления стандарта io. Если вы хотите получить выходные данные, то было бы лучше перенаправить их вручную с помощью CreateProcess или какой-либо оболочки, такой как boost.Process.

0

Выполняю программу на 64 бит машина. bcdedit.exe файл существует в C:\Windows\System32 Хотя C:\Windows\System32 находится в системном пути, в x86 Процесс подлежит Перенаправитель файловой системы. Который означает, что C:\Windows\System32 на самом деле решает C:\Windows\SysWOW64

Здесь нет 32 битовая версия bcdedit.exe в C:\Windows\SysWOW64

Решение состоит в том, чтобы изменить цель AnyCPU или же x64.

0