【发布时间】:2018-11-22 06:10:53
【问题描述】:
我在执行命令行时遇到了一个非常奇怪的问题。下面的代码没有问题:
ShellExecute(NULL, "open", "cmd.exe", "/C ipconfig > file_output.txt", NULL, SW_SHOWNORMAL);
执行时,ipconfig 输出被写入 file_output.txt",这正是我想要的。但是当我使用 bcdedit 时:
ShellExecute(NULL, "open", "cmd.exe", "/C bcdedit > file_output.txt", NULL, SW_SHOWNORMAL);
文件已生成,但文件中没有任何内容。我可以以管理员身份在 cmd.exe 中执行相同的命令,并且可以正常工作。我也试过:
ShellExecute(NULL, "open", "cmd.exe", "/C bcdedit /enum all > file_output.txt", NULL, SW_SHOWNORMAL);
bcdedit 不起作用。没有错误。以下是我尝试过的其他一些方法:
- 改用 CreateProcess。
- 改用系统。
- 将目录设置为 C:\Windows\System32
- 将目录设置为 C:\Windows\SysWOW64\
同样,在 cmd.exe 中执行相同的命令有效,但在我的代码中似乎不起作用。我整天都在寻找,我似乎找不到有用的东西。有什么想法吗?
编辑:经过进一步调试,现在我看到了以下命令。
'bcdedit' 不是内部或外部命令、可运行程序或批处理文件。
'C:\Windows\System32\bcdedit.exe' 未被识别为内部或外部 c 命令,可运行的程序或批处理文件。
我已经再次尝试了上面列出的所有 4 种方法,但显然仍然无法将其识别为命令。 **bcdedit.exe 实际上存在于 C:\Windows\System32** 中。
【问题讨论】:
-
我不太确定 bash 标签适合这里。您的用户是否具有管理权限?如果它被编译为可执行文件,请尝试右键单击该 exe,然后选择“以管理员身份运行”
-
@Jason 是的,用户拥有管理员权限。而是可执行文件具有要求管理员执行级别。
-
你有机会发布更多代码吗?
-
@Jason 这就是所有的代码。检查编辑!显然,尽管使用了所有其他 4 种方法,但无法识别该命令。它仍然对 runas 没有任何影响。
-
也许尝试调用完整路径?在这种情况下不要忘记 \\ for \。
标签: c++ windows batch-file cmd