奇怪的CMD错误,只有当CMD从我的程序打开

Strange CMD errors only when CMD is opened from my program

本文关键字:CMD 我的 程序 错误      更新时间:2023-10-16

这确实很奇怪。

如果我直接打开命令提示符窗口(在开始中搜索cmd,右键单击>在这里打开命令窗口,cmd在bat文件中等....)输入的所有命令都运行良好。

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

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

vssadmin delete shadows /all
vssadmin list shadows
wmic
shadowcopy

等等…我得到了Class not registeredInitialization failure的错误。任何与影子拷贝有关的东西都不起作用。但是,同样奇怪的是,当传统地打开cmd(不是从程序)时,这些相同的命令工作得很好。cmd的两个实例都具有admin权限。

所以我的问题是,为什么我打开cmd的方式会影响一些命令是否工作?

在WOW64上运行的32位应用程序将被置于文件系统重定向下。因此,如果你的应用程序是32位的,调用system("c:\windows\system32\cmd.exe");将被重定向到C:WindowsSysWOW64cmd.exe, 32位的cmd将始终被调用。你有一些解决方案:

  • 使用system("c:\windows\sysnative\cmd.exe");访问真正的system32文件夹并获得64位cmd
  • 显式关闭文件系统重定向(一般应避免)
  • 或者最好将其编译为64位应用。