Powershell закрывается при выполнении exe

#powershell

#powershell

Вопрос:

Я пытаюсь запустить и .exe в C: programfiles (x86), я могу запустить его непосредственно из пути к файлу. Если я запускаю в powershell, просто закрывается. Обратной связи нет.

Запуск powershell 5.1.17134 версии 590

Запуск -Процесс -Путь к файлу «C:Program Файлы (x86)AppApp.exe «

Я попытался запустить powershell -NoExit, а затем start-process, но он возвращается без какой-либо обратной связи.

Если я запускаю его на том же компьютере в Powershell 6.1.0 preview — он работает нормально. Проблем нет. Как я могу отследить, что вызывает это: 1) не запускается 2) закрывает powershell. Спасибо,

Комментарии:

1. Пожалуйста, правильно отформатируйте свой код и пример ввода / вывода .

2. Я бы рекомендовал прочитать полную справку для запуска процесса . Затем вы должны попытаться использовать параметры -Wait -NoNewWindow

Ответ №1:

В этом ответе содержится общий смысл. Это не решает вашу проблему, если при использовании Start-Process действительно происходит сбой вызывающего окна PowerShell.


Если C:Program Files (x86)AppApp.exe это консольное приложение, которое вы хотите запустить в текущем окне консоли, не используйте Start-Process для его вызова.

Вместо этого вызывайте его напрямую.

Учитывая, что его путь содержит пробелы и специальные символы ( ( и ) ), вам необходимо:

 PS> amp; 'C:Program Files (x86)AppApp.exe'
  

Примечание:

  • Использование amp; с командой, указанной в строке, заключенной в кавычки, и / или через ссылку на переменную является синтаксической необходимостью, учитывая, что PowerShell имеет два разных режима синтаксического анализа — см. about_Parsing .

Прямой вызов консольного приложения:

  • обеспечивает его синхронное выполнение

    • То есть управление не возвращается вызывающей стороне до завершения работы приложения.
  • подключает свои стандартные выходные потоки — stdout и stderr — к эквивалентным потокам PowerShell.

    • То есть вы можете записывать или перенаправлять выходные данные успешного выполнения приложения и / или выходные данные ошибки, по мере необходимости.

Ответ №2:

У вас есть интерактивная оболочка. Вы запускаете этот новый процесс — затем ваша оболочка закрывается?

Очевидно, что он завершает свой родительский процесс и явно pwsh делает что-то другое.

Я не думаю, что это действительно вопрос powershell, это вопрос для Windows internals. Набор инструментов для использования — Sysinternals. Первое, что я бы попробовал — и я бы сделал это на cmd , powershell и pwsh , чтобы создать основу для сравнения, — это запустить Process Monitor с фильтром в path вашего приложения. Что-то в его последних действиях может оказаться поучительным. Process Explorer также может быть полезен.

Вы работаете в корпоративной среде? На моем компьютере есть агенты, которые уничтожают процессы на основе эвристики. Который может делать подобные вещи.

Может быть обходной путь, основанный на том, как вы вызываете приложение;

  • попробуйте предложение mklement0
  • попробуйте вызвать через WMI; это не предоставляет ваш процесс powershell в качестве родительского процесса: Invoke-WmiMethod -Class win32_process -Name create -ArgumentList "PathToApp.exe"
  • попробуйте вызвать через cmd.exe если вы ограничены тем, что находится на ваших целевых компьютерах

Хотя я думаю, что это не по теме.

Комментарии:

1. Отлично сделано. В моем ответе содержится общее замечание о частом антишаблоне, но это может не соответствовать реальной проблеме операционной системы — я добавил примечание, чтобы указать на это.