前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于Windows Terminal无法在Win+X菜单和Win+R中通过wt.exe打开的问题

关于Windows Terminal无法在Win+X菜单和Win+R中通过wt.exe打开的问题

作者头像
TagBug
发布2023-03-17 11:44:23
3.6K1
发布2023-03-17 11:44:23
举报
文章被收录于专栏:TagBugTagBug

原因分析、解决方案

# 原因分析

前置条件 1:之前偷懒用 Microsoft Store 安装 python 时,遇到了奇怪的权限问题(通过微软商店安装的 app 文件夹会有特殊权限限制,实测可以删除文件,但无法新建 / 重命名文件),测试的时候不小心修改了 Program Files\WindowsApps 文件夹的权限面板

前置条件 2:通过 Win+X 菜单和 Win+R 运行 wt.exe 都无法运行(打开后进程自动退出,且无 UI 提示),但是可以通过开始菜单和其他 terminal 中输入 wt.exe 运行

可以通过 terminal 中输入 wt.exe 运行就说明并非是应用损坏,而是启动方式问题,直觉想到可能是 Win+X 菜单和 Win+R 附带了什么奇怪的参数,想到火绒剑记录系统日志分析,日志记录如下:

log
log

发现两个 wt.exe 的路径竟然不一样,位于 \AppData\Local\Microsoft\WindowsApps\ 的 wt.exe 似乎是一个软链接,神奇的是资源管理器中显示这个文件是一个 0byte 的 exe,而不是.lnk,不知道为什么…

总之,最终实际运行的还是位于 \WindowsApps\Microsoft.WindowsTerminal_1.12.10983.0_x64__8wekyb3d8bbwe\ 下那个实际的 wt.exe(见下图),而且实测直接打开实际的 wt.exe 效果同 Win+R 打开(无反应),而打开软链接的 wt.exe 就可以正常运行

log
log

那么现在有两个问题:

  1. 同一个 wt.exe 命令,为什么 Win+R(Win+X 菜单实际上执行的也是 Win+R)和 terminal 找到并调用的文件位置不同
  2. 为什么软链接的 wt.exe 就能正常运行,而实际的 wt.exe 却无法运行,明明本质上都是同一个文件

关于问题 1:我的猜想是系统环境变量 Path 中对于这两个路径的定义, \WindowsApps\Microsoft.WindowsTerminal_1.12.10983.0_x64__8wekyb3d8bbwe\ 位于 \AppData\Local\Microsoft\WindowsApps\ 之前,所以优先调用了实际的 wt.exe,然而事实上 Path 中根本就只定义了 \AppData\Local\Microsoft\WindowsApps\ ,所以 Win+R 调用程序的逻辑应该与 terminal 不同,可能不依靠 Path 或 Path 的权重在较后位置(这也就对应了解决方法 1)

关于问题 2:我的猜想是所处位置权限不同或调用方不同,导致实际运行 wt.exe 时,wt.exe 内部调用 syscall 被 Permission Denied(不知道算不算是 bug?),由于之前改过 WindowsApps 文件夹权限,直觉想到应该是 WindowsApps 有特殊权限系统导致,Google 后发现有很多WindowsApps 权限修改导致的 UWP 应用故障案例(这也就对应了解决方法 2)

# 解决方案

由上面的分析,想到下面的解决方法:

  1. 修改 Win+R 调用逻辑
  2. 重置 WindowsApps 权限

这两个方案在国内论坛上都基本找不到相关资料,好在 Github 和 StackOverflow 上有遇到同样问题的老哥

关于方案 1:需要修改注册表中的值: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\wt.exe 下从 C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.12.10983.0_x64__8wekyb3d8bbwe\ 路径到 C:\Users\用户名\AppData\Local\Microsoft\WindowsApps\ ,实测可行,如下图:

关于方案 2:可以尝试使用 icacls "C:\Program Files\WindowsApps" /reset /t /c /q 命令重置权限(需要 SYSTEM 权限才能运行该命令,可以借助 PsExec, psexec.exe -s icacls "C:\Program Files\WindowsApps" /reset /t /c /q ),不过请注意:这个 reset 命令似乎需要先前有过备份,不然特殊权限很难恢复,实测在我的电脑上无效。替代方案:Github 老哥写的 powershell 脚本(没尝试过,可用性未知)

参考: Github Issue 7081 Github Issue 7974 如何将 WindowsApps 文件夹权限重置为默认值 重置 C:\Program Files\WindowsApps 的默认 ACL

Windows Terminal Windows

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-202,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 原因分析
  • # 解决方案
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档