Я вижу два потенциально запутанных элемента здесь.Одним из них является перенаправление файловой системы 32-битных процессов (в результате чего загружается 32-битный cmd.exe, который не может найти wslconfig).Другой вопрос состоит в том, будет ли обработка командной строки перенаправления вывода выполнять то, что вы хотите.
Чтобы проверить, вот несколько вещей, которые вы можете попробовать:
- Запустить тест из32-разрядная командная строка (
c:\Windows\SysWow64\cmd.exe
) - Запустите другую команду, например
cmd /c echo got-it > D:\output.txt
Я подозреваю, что вам, возможно, придется обратиться к обоим, но твердо верю, что32-битный контекст проблематичен.Чтобы обратиться к контексту, попробуйте изменить свой код следующим образом, используя WINSYSDIR64 :
...
szCmdPath = WINSYSDIR64 ^ "cmd.exe";
...
Disable(WOW64FSREDIRECTION);
LaunchAppAndWait(...)
Enable(WOW64FSREDIRECTION);
(В качестве альтернативного подхода вы можете использовать C: \ Windows \ Sysnative из 32-битовый контекст для доступа к 64-битной папке без отключения WOW64FSREDIRECTION. К сожалению, нет переменной, заполненной этим путем, поэтому вам нужно создать или жестко закодировать этот путь.)
Для решения проблемы потенциального перенаправления вывода,рассмотрите возможность цитирования аргументов в / c:
...
szCmdLine = "/c \"wslconfig /l > D:\\output.txt\"";
...