仅当从我的程序打开 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 registered
和 Initialization 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 位应用程序。
这肯定很奇怪。
如果我直接打开命令提示符 window(在开始中搜索 cmd,右键单击 > 在此处打开命令 window,在 bat 文件中打开 cmd,等等...)输入的所有命令 运行 非常好。
如果我从我的 C++ 应用程序(system("cmd");
或 QProcess::startDetached("cmd");
等...)中打开命令提示符 window,我输入的命令会抛出错误。
以下是一些在从我的应用程序打开的 cmd 中不起作用的命令:
vssadmin delete shadows /all
vssadmin list shadows
wmic
shadowcopy
等等...我到处都是 Class not registered
和 Initialization 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 位应用程序。