首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从c程序运行bcdedit?

如何从c程序运行bcdedit?
EN

Stack Overflow用户
提问于 2012-05-31 12:44:14
回答 2查看 1.9K关注 0票数 1

我不明白为什么下面的代码在c程序中运行时会返回"'bcdedit‘不是内部或外部命令“。bcdedit在cmd行上运行得很好。我怎么才能让它工作呢?

代码语言:javascript
复制
#include <stdio.h>

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

回答 2

Stack Overflow用户

发布于 2013-07-25 20:58:26

这是因为当您通过开始菜单甚至是执行窗口运行Command Prompt时,您运行的是位于C:\Windows\System32\cmd.exe的64位cmd版本,但是当从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。

来源:http://msdn.microsoft.com/en-us/library/windows/desktop/aa384187%28v=vs.85%29.aspx

如果你比较两个动态链接库,你会发现它们是一样的,不同的是cmd

问题是Windows x64在System32文件夹中提供了64位的bcdedit.exe,但没有提供32位的bcdedit.exe anywhere。因此,32位cmd cmd无法运行64位命令,因此它返回此命令无效。**

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

票数 2
EN

Stack Overflow用户

发布于 2012-05-31 20:42:32

我认为你已经将一个命令切成了两个part.And我认为你想运行"bcdedit.exe /timeout 3",但是你给系统命令的参数提供了两个部分,一个是"bcedit.exe",另一个是"/timeout 3“。我觉得你应该写这篇文章

代码语言:javascript
复制
system("bcdedit.exe /timeout 3");

要运行wanted.Hope命令,这将对您有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10827556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档