system(“bcdedit / set safeboot”)不会将窗口设置为safeboot

问题描述 投票:1回答:3

这是带有命令的c ++代码,用于在网络模式和重启的safeboot中运行窗口的命令,此代码仅在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位操作系统?

c++ cmd 32bit-64bit bcdedit
3个回答
0
投票

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


0
投票

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


0
投票

我在64位机器上执行程序。 bcdedit.exe文件存在于C:\Windows\System32虽然C:\Windows\System32在系统路径中,但在x86过程中受File System Redirector的影响。这意味着C:\Windows\System32实际上解析为C:\Windows\SysWOW64

32中没有qcxswpoi位版本的bcdedit.exe

解决方案是改变目标C:\Windows\SysWOW64AnyCPU

© www.soinside.com 2019 - 2024. All rights reserved.