Почему Старт-Процесс
не удается найти исполняемый файл (не в пути), если -RedirectStandardOutput
или же -RedirectStandardError
указаны?
т.е.
[X:\] Start-Process -FilePath "prog.exe" -WorkingDirectory (Get-Location).Path
Программа запускается и работает как надо. Но когда я добавляю перенаправление вывода, все разваливается:
[X:\] Start-Process -FilePath "prog.exe" -WorkingDirectory (Get-Location).Path -RedirectStandardOutput stdout.txt
Start-Process: Эта команда не может быть запущена из-за ошибки: Система не может найти указанный файл.
Перенаправление с помощью 1>stdout.txt
оператор работает как положено.
Кажется, это не влияет на программы, которые находятся в каталогах, перечисленных в ДОРОЖКА
. Я не могу понять, в чем здесь логика. Перенаправления не должны иметь ничего общего с разрешением двоичного пути в первую очередь.
Работает на Windows 10 Профессиональная.
Обновлять: Полная трассировка и простой репродуктор
PS> кот .\hello.c
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Мех\п");
получитьсимвол();
вернуть 0;
}
PS> cl hello.c
Оптимизирующий компилятор Microsoft (R) C/C++ версии 19.29.30138 для x86
Авторское право (C) Microsoft Corporation. Все права защищены.
Привет
Инкрементальный компоновщик Microsoft (R) версии 14.29.30138.0
Авторское право (C) Microsoft Corporation. Все права защищены.
/out:привет.exe
привет.obj
PS> Start-Process -FilePath hello.exe -WorkingDirectory(Get-Location).Path
PS> Start-Process -FilePath hello.exe -WorkingDirectory(Get-Location).Path -RedirectStandardOutput stdout.txt
Start-Process: Эта команда не может быть запущена из-за ошибки: Система не может найти указанный файл.
В строке:1 символ:1
+ Start-Process -FilePath hello.exe -WorkingDirectory(Get-Location).Pa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: InvalidOperation: (:) [Start-Process], InvalidOperationException
+ FullyQualifiedErrorId: InvalidOperationException, Microsoft.PowerShell.Commands.StartProcessCommand
Обновление 2:
Кажется, что использование абсолютного пути для исполняемого файла является обходным путем для решения проблемы. (Хотя это не объясняет, почему направление вывода в первую очередь нарушает разрешение имени/пути исполняемого файла)