我不明白为什么从 ac 程序运行以下代码会返回“'bcdedit' 不是内部或外部命令”。bcdedit 在 cmd 行上运行良好。我怎样才能让它工作?
#include <stdio.h>
int main ()
{
system("bcdedit");
system("TIMEOUT /T 3");
return(0);
}
我不明白为什么从 ac 程序运行以下代码会返回“'bcdedit' 不是内部或外部命令”。bcdedit 在 cmd 行上运行良好。我怎样才能让它工作?
#include <stdio.h>
int main ()
{
system("bcdedit");
system("TIMEOUT /T 3");
return(0);
}
发生这种情况是因为当您Command Prompt
通过“开始菜单”甚至“执行”窗口运行时,您正在运行位于 的 64 位cmd
版本,C:\Windows\System32\cmd.exe
但是当cmd
从您的 c 程序调用时,它会调用位于 的 32 位cmd
版本C:\Windows\SySWOW64\cmd.exe
。这是因为您的 C 编译器生成了一个 32 位应用程序。
根据 MSDN:
%windir%\System32 目录是为 64 位应用程序保留的。大多数 DLL 文件名在创建 64 位版本的 DLL 时没有更改,因此 32 位版本的 DLL 存储在不同的目录中。WOW64 通过使用文件系统重定向器隐藏了这种差异。
在大多数情况下,每当 32 位应用程序尝试访问 %windir%\System32 时,访问都会重定向到 %windir%\SysWOW64。
来源:http: //msdn.microsoft.com/en-us/library/windows/desktop/aa384187%28v=vs.85%29.aspx
如果你比较两个cmd
s,你会发现它们是相同的,不同的是dll。
问题是 Windows x64bcdedit.exe
在System32
文件夹中提供 64 位,但在任何地方都没有提供 32 位bcdedit.exe
。所以 32-bitcmd
不能运行 64-bit bcdedit
,所以返回这个命令无效。
解决方案:您既可以bcdedit
从 Windows x86 版本获取 32 位,也可以编译 64 位应用程序。
很可能是因为它找不到可执行文件。确保您的路径正确(a)或使用完整路径名:
system ("c:\\windows\\system32\\bcdedit.exe");
而且,当然,这不言而喻:确保您以管理用户身份运行它。
(a)您应该能够通过以下方式确认这一点:
system ("path");
我认为您已将一个命令分为两部分。并且我认为您想运行“bcdedit.exe /timeout 3”,但是您将系统命令的参数分为两部分,一个是“bcedit.exe”,另一个是“ /超时 3"。我认为你应该写这个
system("bcdedit.exe /timeout 3");
运行你想要的命令。希望这会对你有所帮助