1

这是带有命令的 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

手动它正在工作(在安全启动中运行)但是当我尝试通过代码重新启动 Windows 时,但不在安全启动中。

如何使这在 32 位和 64 位操作系统上都能正常工作?

4

3 回答 3

0

您是否以管理员身份使用 system() 调用运行程序?如果你不这样做,我不会指望这个电话会成功。

于 2017-12-20T07:40:30.763 回答
0

> Out.txt可能不是有效参数请注意,系统不是重定向标准 io 的命令 shell 解释器。如果您想获得输出,那么最好使用 CreateProcess 或一些包装器(例如 boost.Process)手动重定向它们。

于 2017-12-20T07:58:55.413 回答
0

64我正在位机上执行程序。该bcdedit.exe文件存在于C:\Windows\System32虽然C:\Windows\System32在系统路径中,但在x86进程中受文件系统重定向器的约束。这意味着C:\Windows\System32实际上解决了C:\Windows\SysWOW64

中没有32bcdedit.exe 的位版本C:\Windows\SysWOW64

解决方法是改变目标AnyCPUx64.

于 2017-12-22T05:38:25.313 回答