Repository navigation
[BUG] Windows:文件「打开方式」把列表第一项标成默认,认不出商店应用的真实默认程序 #10234
Unanswered
NingYuanLee
asked this question in
Q&A
Replies: 1 comment
|
你定位的两处都对,而且还有一半在客户端:没认出默认项时,它把列表第一项当默认。 Host 侧在
商店应用两条都不匹配:kind 2 没有 exe;打包应用 客户端侧在 影响比标签大:主按钮和"默认"打开走的是这个 id,可能拿错应用打开文件。这属于"看起来能用、其实用错程序",值得单独立项。 修法形状
自证一行:在 PowerShell 里对同一个扩展名查 只读了 master |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
环境
app.asar)dsh-native-command、dsh-client-ui-open-in-appdsh-native-command/lib/index.js里嵌的DshFileAssociations.List现象
文件卡片和文档预览的「打开」分体按钮,把列表第一项标成默认,而不是 Windows 当前的默认应用。
本机
.mp3、.mp4、.wav的用户默认程序都是「媒体播放器」(Microsoft.ZuneMusic)。DSH 里:.mp4主按钮是「用 照片 打开」,菜单第一项为「照片(默认)」.mp3主按钮是「用 Microsoft Clipchamp 打开」重新打开卡片、重启进程都会再查一次系统,结果不变。这不是缓存没刷新,而是每次都没把真正的默认程序认出来。
和 #9790 不是同一个问题。#9790 说的是菜单用
SHAssocEnumHandlers(..., 0)把全部注册处理器都列出来了。这里说的是:在这份列表里,哪一项被标成「默认」。原因
List只在GetName()等于下面两个值时把default设为 true:AssocQueryString种类 2(ASSOCSTR_EXECUTABLE)ASSOCSTR_APPID)本机这三种扩展名的查询结果:
AppXqj98qxeaynz6dv4459ayz6bnqxbyaqcsMicrosoft.ZuneMusic_8wekyb3d8bbwe!Microsoft.ZuneMusicUserChoice的 ProgId 也是AppXqj98qxeaynz6dv4459ayz6bnqxbyaqcs,对应应用名是「媒体播放器」。但
SHAssocEnumHandlers对商店应用的GetName()/GetUIName()返回的是显示名,不是应用 ID:.mp4:照片、Microsoft Clipchamp、媒体播放器,然后才是记事本、VS Code、Word 的 exe 路径.mp3:第一项是Microsoft Clipchamp,其后是媒体播放器应用 ID 和显示名对不上,于是没有任何一项
default == true。界面接着用了兜底(
OpenTargetButton):找不到
defaultId就用列表第一项,并标上「(默认)」。所以.mp4变成照片,.mp3变成 Clipchamp。IAssocHandler::IsRecommended()不能用来判断默认。本机上照片、Clipchamp、媒体播放器都返回 0,记事本、VS Code、Word 反而返回 1。期望
主按钮和「(默认)」标记应该落在 Windows 当前的默认应用上。本机应为「媒体播放器」。
建议在
DshFileAssociations.List里:GetUIName()/GetName()比较。商店应用走这条才能命中。请不要把 #9790 的修法(把枚举过滤从 0 改成
ASSOC_FILTER_RECOMMENDED)当作这个问题的修复。推荐集和用户默认不是一回事,而且 #9790 已经说明:推荐集为空时菜单会退化。All reactions