1

这肯定是一个奇怪的问题。

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

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

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

vssadmin delete shadows /all
vssadmin list shadows
wmic
shadowcopy

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

所以我的问题是,我打开 cmd 的方式如何影响某些命令是否有效?我所看到的一切都表明应该没有区别。

4

1 回答 1

3

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

  • 用于system("c:\\windows\\sysnative\\cmd.exe");访问真正的system32文件夹并获取64位cmd
  • 显式关闭文件系统重定向(一般应避免)
  • 或者更好地将其编译为 64 位应用程序。
于 2015-09-08T11:20:47.607 回答