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