我正在尝试在C:programfiles(x86)中运行.exe 我可以直接从文件路径启动它。如果我在Powershell中运行,则关闭。没有反馈。
运行powershell 5.1.17134修订版590
开始处理-FilePath“ C:\ Program Files(x86)\ App \ App.exe”
我尝试运行powershell -NoExit,然后启动进程,但返回时没有任何反馈。
如果我在Powershell 6.1.0预览版的同一台计算机上运行它,则运行良好。没有任何问题。我如何跟踪导致此的原因1)无法运行2)关闭powershell。 谢谢,
答案 0 :(得分:3)
这个答案提出了一个普遍的观点。如果使用Start-Process
确实使调用PowerShell窗口崩溃,则无法解决问题。
如果C:\Program Files (x86)\App\App.exe
是要在当前控制台窗口中运行的控制台应用程序,请不要使用Start-Process
调用它。
相反,直接 调用它。
鉴于其路径包含空格和特殊字符((
和)
),您需要:
引用
使用PowerShell的call operator的 &
进行调用。
PS> & 'C:\Program Files (x86)\App\App.exe'
注意:
&
与带引号的字符串中指定的命令和/或通过变量引用一起使用,请参见about_Parsing。直接调用控制台应用程序:
确保其同步执行
将其标准输出流-stdout和stderr-连接到等效的PowerShell流。
答案 1 :(得分:1)
您有一个交互式外壳。您产生了这个新过程-然后您的外壳关闭了吗?
很明显,它正在终止其父进程,显然pwsh
在做一些不同的事情。
我认为这并不是一个真正的问题,它是Windows内部的问题。使用的工具套件是Sysinternals。我要尝试的第一件事-我将在cmd
,powershell
和pwsh
上建立比较的基础-在您的应用路径上运行带有过滤器的Process Monitor 。它的最后动作可能会启发人。 Process Explorer也可能有用。
您在公司环境中吗?我的机器上有一些代理,它们会根据启发式方法杀死进程。这样可以做到。
根据您调用应用程序的方式,可能有一种解决方法;
Invoke-WmiMethod -Class win32_process -Name create -ArgumentList "PathToApp.exe"
我确实认为这是题外话。