如果指定了或者,为什么Start-Process
找不到可执行文件(不在路径中) ?-RedirectStandardOutput
-RedirectStandardError
IE
[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: This command cannot be run due to the error: The system cannot find the file specified.
通过操作员进行的重定向1>stdout.txt
按预期工作。
这似乎不会影响 中列出的目录中的程序PATH
。我真的不明白这里的逻辑是什么。重定向应该与解析二进制路径无关。
在 Windows 10 Professional 上运行。
更新:完整追踪和简单再现
PS> cat .\hello.c
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Meh\n");
getchar();
return 0;
}
PS> cl hello.c
Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30138 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
hello.c
Microsoft (R) Incremental Linker Version 14.29.30138.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:hello.exe
hello.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 : This command cannot be run due to the error: The system cannot find the file specified.
At line:1 char:1
+ Start-Process -FilePath hello.exe -WorkingDirectory (Get-Location).Pa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Start-Process], InvalidOperationException
+ FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand
更新 2:
似乎对可执行文件使用绝对路径是解决该问题的方法。(尽管它首先没有解释为什么输出方向会破坏可执行文件名称/路径解析)
答案1
获取可执行文件的完整路径。
我没有完整的解释......但我记得它与 c++ 中的 ShellExecute 和 CreateProcess 有关
https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutew
我最好的猜测是 shellexecute 是问题所在。您可以在文档中找到。
ShellExecute(handle, NULL, <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
Redirect 参数可能会更改底层调用。请参阅 .NET 等效项。