You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在当前CMD进程中启动微软商店应用以获取日志与返回码?

如何在当前CMD进程中启动微软商店应用以获取日志与返回码?

我完全懂你现在的困扰——用start shell:AppsFolder\BlenderFoundation.Blender_ppwjx1n5r4v9t!BLENDER或者调用explorer启动商店版Blender时,CMD会立刻结束命令,程序在独立进程跑,既看不到实时日志也拿不到退出返回码,直接敲那个特殊路径还会报找不到文件,太闹心了。我来给你拆解下问题和可行的解决思路:

先搞懂为什么直接运行那个特殊路径会失败

那个shell:AppsFolder\BlenderFoundation.Blender_ppwjx1n5r4v9t!BLENDER是Windows的特殊协议路径,不是可执行文件的实际物理路径,必须靠start、explorer这类系统程序去解析它对应的商店应用,所以直接在CMD里敲这条命令,系统肯定找不到路径,这是正常现象。

现有启动方式的核心问题

用start或explorer启动时,系统会把商店应用作为完全独立的子进程启动,和原CMD进程彻底分离,所以原CMD进程既没法捕获它的控制台输出,也没法等待它退出后获取返回码。

可行的解决思路

1. 让应用输出日志到文件,结合脚本监控(最稳妥)

商店版Blender和桌面版的启动参数大部分是通用的,你可以利用它的日志输出参数,配合start的等待命令来实现需求:

  • 首先用带/wait的start命令启动Blender,同时指定日志输出文件和级别:
    start /wait shell:AppsFolder\BlenderFoundation.Blender_ppwjx1n5r4v9t!BLENDER --log-file "C:\blender_runtime_log.txt" --log-level 2
    
    这里/wait会让CMD一直等待Blender退出,退出后你可以用echo %errorlevel%拿到它的返回码;而所有日志会实时写入你指定的文件。
  • 如果想在CMD里实时看到日志内容,可以开另一个CMD窗口,用PowerShell的命令监控日志文件:
    Get-Content "C:\blender_runtime_log.txt" -Wait
    
    这样就能在窗口里实时看到Blender的日志输出了。

2. 用PowerShell的Start-Process增强控制

PowerShell的Start-Process比CMD的start功能更灵活,你可以用它启动商店应用,同时强制等待退出,结合日志文件来实现需求:

Start-Process -FilePath "shell:AppsFolder\BlenderFoundation.Blender_ppwjx1n5r4v9t!BLENDER" -ArgumentList "--log-file C:\blender_runtime_log.txt" -Wait

应用退出后,你可以用$LASTEXITCODE获取它的返回码,日志同样会写到指定文件里,再配合监控命令就能看实时输出。

3. 尝试直接启动应用的实际可执行文件

商店应用的实际exe藏在C:\Program Files\WindowsApps\BlenderFoundation.Blender_<具体版本号>_<架构>目录下,但这个目录默认有权限限制,普通用户没法直接访问。如果你用管理员身份打开CMD,修改目录权限后找到里面的blender.exe,直接运行它的话,就能在当前CMD进程里捕获日志和返回码。不过要注意,商店版应用依赖Appx的运行环境,直接运行exe可能会出现兼容性问题,需要测试后再用。

目前Windows原生没有办法让start/explorer启动的商店应用和原CMD进程共享输出流,所以最稳妥的还是日志文件+监控的组合方案,既能满足实时看日志的需求,又能拿到返回码。

备注:内容来源于stack exchange,提问作者FamousSnake

火山引擎 最新活动