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

如何通过可执行路径从CMD启动Windows应用?权限问题求助

解决Windows Store应用(如计算器)无法通过直接执行EXE路径启动的问题

这是个很典型的Windows Store应用(现在统一叫MSIX/Desktop Bridge应用)的启动权限问题,我之前做进程监控重放工具时也踩过一模一样的坑!

为什么直接运行EXE会提示「拒绝访问」?

Windows Store应用是基于沙箱机制运行的,它们的可执行文件不能脱离应用包的上下文单独启动。直接双击或执行C:\Program Files\WindowsApps\...\Calculator.exe时,系统不会加载该应用对应的沙箱环境、权限配置、包注册信息,就算用管理员权限也没用——因为限制你的不是文件系统权限,而是应用运行必需的包上下文

可行的启动方法(用可执行路径关联的上下文启动)

下面是几个能通过应用标识启动对应程序的方法,你可以集成到你的重放逻辑里:

  • 使用应用的AUMID(应用用户模型ID)通过Explorer启动
    每个Windows Store应用都有唯一的AUMID,格式是[PackageFamilyName]!App。以计算器为例,它的AUMID是Microsoft.WindowsCalculator_8wekyb3d8bbwe!App。你可以用以下命令启动:

    explorer.exe shell:AppsFolder\Microsoft.WindowsCalculator_8wekyb3d8bbwe!App
    

    要获取任意Windows Store应用的AUMID,在PowerShell里执行:

    Get-AppxPackage | Where-Object {$_.Name -match "Calculator"} | Select-Object PackageFamilyName
    

    拿到PackageFamilyName后,拼接!App就是完整的AUMID。

  • 用系统ShellExecute机制启动
    在代码里调用ShellExecute API(或者命令行里用start命令),传入AUMID对应的shell路径:

    start shell:AppsFolder\Microsoft.WindowsCalculator_8wekyb3d8bbwe!App
    

    这种方式会让Windows系统自动处理应用的沙箱上下文、权限加载,和你点击开始菜单启动的效果完全一致。

优化你的进程监听逻辑

你的应用现在没抓到calc命令,是因为Windows Store应用的启动是通过系统进程(比如explorer.exesvchost.exe)触发的,直接监听CreateProcess事件可能只会拿到系统进程的调用。建议:

  • 监听ETW(事件跟踪)事件,比如Microsoft-Windows-AppModel-Runtime下的AppLaunch事件,里面会包含完整的AUMID和应用启动信息;
  • 追踪进程的父链,找到触发启动的系统进程,从中提取应用标识。

内容的提问来源于stack exchange,提问作者hasdrubal

火山引擎 最新活动