如何从我的c程序运行bcdedit?

时间:2012-05-31 04:44:14

标签: c

我不明白为什么以下代码在从c程序运行时返回“'bcdedit'不是内部或外部命令”。 bcdedit在cmd线上完美运行。我怎样才能让它发挥作用?

#include <stdio.h>

int main ()
{
    system("bcdedit");
    system("TIMEOUT /T 3");
    return(0);
}

3 个答案:

答案 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");

运行你想要的命令。希望这会对你有帮助