C#使用CMD命令提示符调用bcdedit无法执行命令得到输出结果的解决办法

时间:2022-09-02 20:28:43

昨晚闲来无事,就想着使用C#写一个判断系统方式的小程序,具体功能就是实现判断出当前的系统启动方式是UEFI+GPT还是传统的BIOS+MBR,想来想去感觉还是使用bcdedit这个命令来判断比较合适,于是就写好了代码就进行测试,谁知莫名其妙的事情发生了,在win10系统自带的命令提示符下可以顺利执行bcdedit命令,但是换用C#调用CMD来执行bcdedit就没有任何输出反应了,反复检查代码没有发现问题,到系统目录下找bcdedit.exe也没发现问题,郁闷了良久,后来在一个老外的网站中看到了类似的问题,于是恍然大悟,那么下面亦是美网络就给大家分享下C#使用CMD命令提示符调用bcdedit无法执行命令得到输出结果的解决办法吧!

网上有提到这个问题的解决办法的,说程序不是以管理员身份运行的原因,其实不然,那只是一方面,一般情况下出现这个问题的原因,大多是在64位的操作系统上安装了Visual Studio,亦是美网络小编就是在win10 64系统上安装的VS2015,为了软件的兼容性,我们一般都会将软件运行的目标平台设置为“Any CPU”,其实这样设置是没问题的,但是在VS的项目解决方案的“属性”-“生成”选项里还有一项“引用路径”这个设置,并且默认“首选32位”是勾选的,如下图所示, 

C#使用CMD命令提示符调用bcdedit无法执行命令得到输出结果的解决办法

正是因为默认勾选了“首选32位”这个设置,才导致bcdedit无法正常运行,因为我们是64位的系统,正常情况下C#调用CMD执行bcdedit应该是使用的C:\Windows\System32\bcdedit.exe,但是默认勾选“首选32位”后,系统文件就会被重定向到C:\Windows\SysWOW64,而C:\Windows\SysWOW64目录下并没有32位的bcdedit.exe,那么这时系统就会报错“bcdedit不是一个内部或外部命令,也不是可运行的程序或批处理文件”,或者就像亦是美网络小编遇到那种情况,不报错,但没有任何输出结果,这时有人就想到办法了,说用C#调用cmd命令时,直接指定bcdedit的绝对路径C:\Windows\System32\bcdedit.exe不就好了?理论是这样,但实际是不行的,经测试,即使指定了C:\Windows\System32\bcdedit.exe,程序依然将bcdedit重定向为C:\Windows\SysWOW64。

下面给大家介绍两个解决办法:

1、右键点击我们的解决方案里的项目名称,选择“属性”,然后在打开的窗口找到“生成”,在这个界面将“首选32位”前面的勾去掉,保存后重新生成程序,如上图所示。

2、给bcdedit设定非系统默认路径,比如我们可以将C:\Windows\System32下的bcdedit.exe拷贝到其他目录,然后给bcdedit指定绝对路径,这样程序就可以顺利执行并得到输出结果了。

一个小问题说了这么多,有点乱,不知道大家听明白了否?

相关推荐阅读:

C#如何调用以管理员身份运行的cmd命令提示符

捐助支持本站     站长QQ/微信:1580005208     官方QQ群:589766974(点击即可加入)

本站推荐阅读:实战绝招分享:半个月变身计算机大神就是这样练成的

原文出处:C#使用CMD命令提示符调用bcdedit无法执行命令得到输出结果的解决办法

http://www.yishimei.cn/network/681.html