InstallScript не может прочитать текстовый файл, содержащий результат из командной строки - PullRequest
0 голосов
/ 26 апреля 2018

Я пишу функцию Installscript для запуска команды в командной строке, перенаправления результата из консоли в текстовый файл, а затем для получения информации прочитайте текстовый файл.

// send command method
STRING szCmdPath, szCmdLine ;
szCmdPath = "C:\\WINDOWS\\system32\\cmd.exe";
szCmdLine = "/c wslconfig /l > D:\\output.txt";
LaunchAppAndWait(szCmdPath, szCmdLine, WAIT);

метод отправки команды не сделалЗапустите команду с szCmdLine, как я хотел, она не смогла распознать команду и выдает следующую ошибку:

'wslconfig' не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл.

Однако, если я запускаю cmd.exe вручную, а не использую сценарий, он прекрасно выполняет команду.Что не так с моим скриптом и как исправить эти проблемы?Спасибо всем заранее.

1 Ответ

0 голосов
/ 30 апреля 2018

Я вижу два потенциально запутанных элемента здесь.Одним из них является перенаправление файловой системы 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\"";
...
...