Powershell在执行exe时关闭

时间:2019-03-19 21:00:48

标签: powershell

我正在尝试在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。 谢谢,

2 个答案:

答案 0 :(得分:3)

这个答案提出了一个普遍的观点。如果使用Start-Process确实使调用PowerShell窗口崩溃,则无法解决问题。


如果C:\Program Files (x86)\App\App.exe是要在当前控制台窗口中运行控制台应用程序,请不要使用Start-Process调用它。

相反,直接 调用它。

鉴于其路径包含空格和特殊字符(()),您需要:

PS> & 'C:\Program Files (x86)\App\App.exe'

注意:

  • 考虑到PowerShell具有两种不同的解析模式,请在语法中有必要将&与带引号的字符串中指定的命令和/或通过变量引用一起使用,请参见about_Parsing

直接调用控制台应用程序:

  • 确保其同步执行

    • 也就是说,在应用程序终止之前,控制权不会返回给调用者。
  • 将其标准输出流-stdout和stderr-连接到等效的PowerShell流。

    • 也就是说,您可以根据需要捕获或重定向应用程序的成功输出和/或错误输出。

答案 1 :(得分:1)

您有一个交互式外壳。您产生了这个新过程-然后您的外壳关闭了吗?

很明显,它正在终止其父进程,显然pwsh在做一些不同的事情。

我认为这并不是一个真正的问题,它是Windows内部的问题。使用的工具套件是Sysinternals。我要尝试的第一件事-我将在cmdpowershellpwsh上建立比较的基础-在您的应用路径上运行带有过滤器的Process Monitor 。它的最后动作可能会启发人。 Process Explorer也可能有用。

您在公司环境中吗?我的机器上有一些代理,它们会根据启发式方法杀死进程。这样可以做到。

根据您调用应用程序的方式,可能有一种解决方法;

  • 尝试mklement0的建议
  • 尝试通过WMI调用;这不会将您的Powershell进程作为父进程提供:Invoke-WmiMethod -Class win32_process -Name create -ArgumentList "PathToApp.exe"
  • 如果您受目标计算机上的内容限制,请尝试通过cmd.exe调用

我确实认为这是题外话。