Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从c程序运行bcdedit?_C - Fatal编程技术网

如何从c程序运行bcdedit?

如何从c程序运行bcdedit?,c,C,我不明白为什么下面的代码在从c程序运行时返回“'bcdedit'不是内部或外部命令”。bcdedit在cmd线上工作得非常好。我怎样才能让它工作 #include <stdio.h> int main () { system("bcdedit"); system("TIMEOUT /T 3"); return(0); } #包括 int main() { 系统(“bcdedit”); 系统(“超时/t3”); 返回(0); } 很可能是因为它找不到可执行文

我不明白为什么下面的代码在从c程序运行时返回“'bcdedit'不是内部或外部命令”。bcdedit在cmd线上工作得非常好。我怎样才能让它工作

#include <stdio.h>

int main ()
{
    system("bcdedit");
    system("TIMEOUT /T 3");
    return(0);
}
#包括
int main()
{
系统(“bcdedit”);
系统(“超时/t3”);
返回(0);
}

很可能是因为它找不到可执行文件。请确保路径正确(a)或使用完整路径名:

system ("c:\\windows\\system32\\bcdedit.exe");
当然,这应该不言而喻:确保以管理用户的身份运行它


(a) 您应该能够通过以下方式确认这一点:

system ("path");

我认为您已经将一个命令分为两部分。我认为您希望运行“bcdedit.exe/timeout 3”,但您给出了 系统命令的参数有两部分,一部分是“bcedit.exe”,另一部分是“/timeout 3”。我想你应该写这个

system("bcdedit.exe /timeout 3");

运行您想要的命令。希望这能帮助您

因为当您通过“开始”菜单甚至“执行”窗口运行
命令提示符
时,您运行的是64位
cmd
版本,位于
C:\Windows\System32\cmd.exe
,但是,当从c程序调用
cmd
时,它会调用位于
c:\Windows\SySWOW64\cmd.exe
的32位
cmd
版本这是因为您的C编译器生成32位应用程序。

根据MSDN:

%windir%\System32目录是为64位应用程序保留的。 当使用64位版本的DLL时,大多数DLL文件名没有更改 是创建的,因此32位版本的DLL存储在不同的 目录WOW64通过使用文件系统隐藏此差异 重定向器

在大多数情况下,只要32位应用程序尝试访问 %windir%\System32,访问被重定向到%windir%\SysWOW64。

资料来源:

如果比较两个
cmd
s,您会发现它们是相同的,不同的是dll

问题是Windows x64在
System32
文件夹中提供了64位
bcdedit.exe
,但在任何地方都不提供32位
bcdedit.exe
因此32位
cmd
无法运行64位
bcdedit
,因此它返回该命令无效。


解决方案:您既可以从Windows x86版本获得32位的
bcdedit
,也可以编译64位的应用程序。

您可能需要提供程序的完整路径。我也试过了。还是没什么。我使用了系统(“C:\Windows\System32\bcdedit.exe”);既然看起来你在使用windows,你就必须避开那些反斜杠<代码>系统(“C:\\Windows\\System32\\bcdedit.exe”)非常正确。我这样做了,只是忘了在示例中使用它。您可能需要以管理员身份运行您的程序才能启动bcdedit。exeI检查了路径,可以确认C:\Windows\System32在其中。@Andrew,您使用的是什么编译器?我只是厌倦了使用digital mars dmc编译器,但仍然无法工作超时是一个单独的命令。Bcedit在没有参数的情况下运行显示了一个选项列表。@Andrew我已经测试了相同的代码和相同的编译器来编译代码,但我的程序运行正常。你应该检查你的系统是否有名为“bcdedit.exe”的程序,这很奇怪。我已经确认bcdedit在那里。当直接输入命令行时,命令行代码可以正常工作,但是,当通过c程序使用时,它不工作。