仅当从我的程序打开 CMD 时出现奇怪的 CMD 错误

Strange CMD errors only when CMD is opened from my program

这肯定很奇怪。

如果我直接打开命令提示符 window(在开始中搜索 cmd,右键单击 > 在此处打开命令 window,在 bat 文件中打开 cmd,等等...)输入的所有命令 运行 非常好。

如果我从我的 C++ 应用程序(system("cmd");QProcess::startDetached("cmd"); 等...)中打开命令提示符 window,我输入的命令会抛出错误。

以下是一些在从我的应用程序打开的 cmd 中不起作用的命令:

vssadmin delete shadows /all
vssadmin list shadows
wmic
shadowcopy

等等...我到处都是 Class not registeredInitialization failure 错误。与影子副本有关的任何事情都不起作用。但同样,奇怪的是,当 cmd 以传统方式(不是从程序)打开时,这些相同的命令工作得很好。 cmd 的两个实例都具有管理员权限。

所以我的问题是,我打开 cmd 的方式为什么会影响某些命令的运行?我所看到的一切都表明应该没有区别。

WOW64 上的 32 位应用程序 运行 将放在 file system redirection 下。因此,如果您的应用程序是 32 位应用程序,调用 system("c:\windows\system32\cmd.exe"); 将被重定向到 C:\Windows\SysWOW64\cmd.exe 并且将始终调用 32 位 cmd。您有一些解决方案:

  • 使用system("c:\windows\sysnative\cmd.exe");访问真正的system32文件夹,获取64位cmd
  • 明确关闭文件系统重定向(通常应避免)
  • 或者更好地将其编译为 64 位应用程序。