#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
для его вызова.
Вместо этого вызывайте его напрямую.
Учитывая, что его путь содержит пробелы и специальные символы ( (
и )
), вам необходимо:
-
процитируйте это
-
вызовите его с помощью
amp;
, оператора вызова PowerShell.
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. Отлично сделано. В моем ответе содержится общее замечание о частом антишаблоне, но это может не соответствовать реальной проблеме операционной системы — я добавил примечание, чтобы указать на это.