Это странно, конечно.
Если я открою окно командной строки напрямую (при поиске cmd в начале, щелкните правой кнопкой мыши> открыть окно командной строки здесь, cmd в файле bat и т. Д ….), все введенные команды будут работать отлично.
Если я открою окно командной строки из моего приложения C ++ (system("cmd");
или же QProcess::startDetached("cmd");
и т.д ….) Вводимые мной команды выдают ошибки.
Вот несколько команд, которые не работают в cmd, открытом из моего приложения:
vssadmin delete shadows /all
vssadmin list shadows
wmic
shadowcopy
и так далее … я получаю Class not registered
а также Initialization failure
ошибки все вокруг. Все, что связано с теневыми копиями, вообще не работает. Но опять же, странно то, что те же самые команды прекрасно работают, когда cmd был открыт традиционно (не из программы). Оба экземпляра cmd имеют права администратора.
Поэтому мой вопрос: почему способ открытия cmd влияет на работу некоторых команд? Все, что я вижу, говорит, что не должно быть никакой разницы.
Для вещей, которые являются 32 или 64-битными, вы должны назвать правильную версию. 32-битные приложения, работающие на WOW64, будут помещены под перенаправление файловой системы.
Так что, если ваше приложение 32-битное, вызов system("c:\\windows\\system32\\cmd.exe");
будет перенаправлен на C:\Windows\SysWOW64\cmd.exe
и 32-битный cmd всегда будет вызываться. У вас есть несколько решений:
system("c:\\windows\\sysnative\\cmd.exe");