Windows Server 2016中替换MSPaint为mstsc.exe作默认图片查看器的咨询
问题:修改Windows Server 2016中图片文件默认打开程序为远程应用
问题背景
我正在编写脚本,为Windows Server 2016远程桌面会话主机的不同文件类型分配远程应用作为默认打开程序。脚本对无默认程序的文件类型有效,但修改默认图片查看器时,仅将目标应用添加为用户的“打开方式”选项,双击文件资源管理器中的图片仍默认使用MSPaint。
当前.jpg文件的注册表结构
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg] [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\OpenWithList] "a"="mspaint.exe" "MRUList"="ab" "b"="mstsc.exe" [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\OpenWithProgids] "jpegfile"=hex(0): [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\UserChoice] "Hash"="Qw/OEl5uE2E=" "ProgId"="PBrush"
疑问
我能否直接删除.jpg对应的OpenWithList和UserChoice注册表项,替换为以下内容?
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\OpenWithList] "a"="mstsc.exe" "MRUList"="a" [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\UserChoice]
这样操作后,资源管理器能否直接用mstsc.exe打开jpg文件,而不提示用户选择程序?
解答
直接删除并替换成你给出的内容无法实现预期效果,核心原因如下:
UserChoice项不能留空:这个键是Windows记录用户指定默认程序的核心项,必须包含合法的ProgId和对应的Hash值才能生效。Windows会校验Hash的合法性,空的UserChoice会被系统忽略,此时系统会 fallback 到OpenWithProgids中的默认关联(即jpegfile对应的MSPaint)。OpenWithList不控制默认程序:这个项仅记录用户用过的打开程序列表,不决定双击文件时的默认启动程序,真正控制默认行为的是UserChoice中的ProgId,以及该ProgId对应的程序关联配置。
正确操作步骤
要让mstsc.exe成为.jpg的默认打开程序,需按以下流程操作:
- 创建mstsc.exe对应的ProgId关联
先为mstsc.exe创建专属ProgId,并配置打开命令:[HKEY_CURRENT_USER\Software\Classes\RemoteDesktop.Session] @="Remote Desktop Session" [HKEY_CURRENT_USER\Software\Classes\RemoteDesktop.Session\shell\open\command] @="\"C:\\Windows\\System32\\mstsc.exe\" \"%1\"" - 合法更新
UserChoice项
删除原有UserChoice项后,不能手动填写空项或自定义Hash——Hash是Windows根据ProgId和文件扩展名生成的校验值,必须通过系统API(如IApplicationAssociationRegistration::SetAppAsDefault)或官方命令工具生成。手动修改的Hash会被判定无效,导致默认设置不生效。 - 更新
OpenWithList(可选)
将mstsc.exe设为OpenWithList的第一项,方便用户在“打开方式”中快速选择,但这不是影响默认行为的必要操作。
更可靠的脚本化方案
避免手动处理注册表Hash问题,可直接使用命令行工具完成配置:
assoc .jpg=RemoteDesktop.Session ftype RemoteDesktop.Session="C:\Windows\System32\mstsc.exe" "%1"
内容的提问来源于stack exchange,提问作者user319862
相关产品推荐
相关产品推荐

