Вопрос или проблема
Можно запустить приложение из MS Store с cmd
, используя start shell:AppsFolder\BlenderFoundation.Blender_ppwjx1n5r4v9t!BLENDER
, но команда завершается сразу, и приложение Windows запускается в отдельном процессе, его логи не видны в cmd
, и невозможно получить код возврата от приложения, когда оно завершится.
Есть идеи, как его запустить в том же процессе, чтобы логи шли в то же окно cmd
, и чтобы оно ожидало завершения приложения для получения кода возврата?
Альтернативный explorer shell:AppsFolder\BlenderFoundation.Blender_ppwjx1n5r4v9t!BLENDER
работает так же, как команда start
.
Запуск shell:AppsFolder\BlenderFoundation.Blender_ppwjx1n5r4v9t!BLENDER
напрямую приводит к ошибке “Система не может найти указанный путь.”, так что я предполагаю, что это специальное имя приложения, которое требует другого приложения (start/explorer) для его интерпретации.
В теории возможно каким-то образом изменить приложение, чтобы оно выводило свои логи в какой-то конкретный файл, и написать скрипт, который будет следить, пока процесс приложения не завершится, а затем использовать результаты каким-то образом, но это излишне.
Blender, который я использовал для тестов – https://www.microsoft.com/store/productId/9PP3C07GTVRH?ocid=pdpshare
Ответ или решение
Запуск приложений из Microsoft Store с помощью командной строки может быть полезен для разработчиков и системных администраторов, однако, как показывает практика, сделать это так, чтобы получить логи и код возврата, не так просто, как хотелось бы. Рассмотрим возможные способы запуска приложения, таких как Blender, и получения необходимых данных.
Проблема
Команда:
start shell:AppsFolder\BlenderFoundation.Blender_ppwjx1n5r4v9t!BLENDER
запускает приложение, но управление возвращается в командную строку сразу же. Это ведет к тому, что логи приложения и код возврата недоступны для анализа.
Возможное решение
К сожалению, приложения, устанавливаемые из Microsoft Store, запускаются в контейнерах и независимых процессах, что делает невозможным их запуск в текущем процессе командной строки. Однако можно рассмотреть несколько альтернативных подходов:
-
Использование PowerShell: PowerShell может предложить более гибкие возможности работы с процессами. К примеру, можно использовать следующий скрипт, чтобы запустить приложение и дождаться его завершения:
$app = Start-Process shell:AppsFolder\BlenderFoundation.Blender_ppwjx1n5r4v9t!BLENDER -PassThru $app.WaitForExit() $exitCode = $app.ExitCode Write-Host "Код возврата приложения: $exitCode"
Этот скрипт создает новый процесс для запуска приложения, ожидает его завершения и затем выводит код возврата.
-
Перенаправление логов в файл: Если сам Blender или другое приложение поддерживает настройку для вывода логов в файл, это может быть оптимальным решением. После завершения работы приложения можно просмотреть содержимое файла логов. Можно также создать обертку, которая будет запускать приложение и следить за логами:
- Напишите скрипт, который будет обрабатывать выходные данные приложения и записывать их в файл. Например:
@echo off start /WAIT shell:AppsFolder\BlenderFoundation.Blender_ppwjx1n5r4v9t!BLENDER > blender_logs.txt 2>&1 echo Приложение завершилось с кодом: %ERRORLEVEL%
-
Мониторинг процессов: Вы можете использовать утилиты, такие как Process Monitor или Task Manager, чтобы следить за выводом логов во время работы приложения. Эти утилиты могут быть полезны для более детального анализа.
Итог
Запуск приложений из Microsoft Store напрямую из командной строки с отображением логов и кодов возврата ограничен. Однако, с помощью PowerShell, возможности перенаправления логов и инструментария для мониторинга процессов, можно добиться желаемого результата. Эти методы позволяют обойти ограничения, накладываемые системой, и предоставляют больше информации о работе приложений.
Если вас интересует более глубокая автоматизация этого процесса или определенные настройки Blender, рекомендуется ознакомиться с документацией соответствующих инструментов или узнать о сообществах разработчиков, которые обсуждают подобные решения.