普通方式(无效)

通常,我们在Windows10系统中修改文件的默认应用有两种方式:

  1. 打开系统设置->应用->默认应用->按文件类型指定默认应用,找到相应的文件类型后进行修改;
  2. 选中目标文件->右键->打开方式->选择其它应用,勾选“始终使用此应用打开**文件”复选框,然后在“其它选项”列表中进行选择,如果列表中没有想要的应用,可以点击“在这台电脑上查找其它应用”,找到想要的应用的可执行文件后选中即可。

但是,这两种方式对jar文件都无效。(我目前的jar文件默认应用是jdk15的javaw.exe,想要改成jdk1.8的javaw.exe。)

第一种方式应用列表里没有列出想要的应用,如上图(OpenJDK Platform binary代表的是jdk15的javaw.exe)。

第二种方式,点击“在这台电脑上查找其它应用”->选中jdk1.8的javaw.exe(并勾选“始终使用此应用打开xx文件”复选框)后还是以原来的默认应用(jdk15的javaw.exe)打开了jar文件,而且jar文件的默认应用也没有改变,甚至在jar文件打开方式的“其它选项”列表中都没有出现这一项,说明并没有生效。

修改注册表

既然一般的方法没法生效,那只能通过修改注册表来修改默认应用了。

打开注册表编辑器(快捷键WIN+R -> 输入regedit),因为我们要修改文件的默认打开方式,故定位到计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts项下,找到.jar项,再选中UserChoice项,其中ProgId值为jarfile

这里需要注意下,注册表中类似文件资源管理器中目录的东西叫项(K),每个项可能有好几个值,这些值用值名称(N)来区分,每个值名称对应一个值数据(V)。

参考网上资料,根据这个值可以定位到计算机\HKEY_CLASSES_ROOT\jarfile项,依次点开shell\open\command项,其(默认)值为"D:\ProgramFiles\Java\jdk-15.0.2\bin\javaw.exe" -jar "%1" %*,其中的路径就是我的jdk15的javaw.exe所在的位置,现修改路径为“D:\ProgramFiles\Java\jdk1.8.0_201\bin\javaw.exe”,其它保持不变。

经测试成功修改了jar文件的默认应用为jdk1.8的javaw.exe。

修改注册表-方法2

到了这一步,即使我对注册表一窍不通,也还是有些想法的。既然jar文件在已设置过默认应用的情况下不能用普通方式的第二种(以下简称普2)来修改默认应用,那么如果解绑默认应用的设置,让它回到没有任何默认应用的状态,再用普2来修改是不是就能成了呢?结果一试便知。

既然计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\UserChoice项下的ProgId值和默认应用有关,删掉它应该就能解绑默认应用。但是经过尝试删不掉,连值数据都无法修改。那退而求其次,将计算机\HKEY_CLASSES_ROOT\jarfile\shell\open\command项的(默认)值数据置空试一试。

果然可以。那么现在再来按普2操作一遍。

默认应用也设置成功了(Java™ Platform SE binary代表的就是jdk8的javaw.exe)。但是却出现了新的问题,双击jar包没有任何反应,要知道我测试的jar包是一个GUI应用,不是一个类库。那么说明设置的默认应用必定是有问题的。

我们再到注册表的计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\UserChoice项下看看:

ProgId值已经变了,虽然不知道具体含义,但根据前面定位jarfile项的经验来推测,注册表中必有一个项和它对应。从当前项一级级往上找,配合搜索功能,最终定位到计算机\HKEY_CURRENT_USER\SOFTWARE\Classes\Applications\javaw.exe项,依次打开shell\open\command子项。

是刚刚设置的默认应用的路径没错。不过这里的(默认)值和前面jarfile目录下的(默认)值("D:\ProgramFiles\Java\jdk-15.0.2\bin\javaw.exe" -jar "%1" %*)却有些不同(忽略路径差异),这里的值少了-jar%*%*不知道是啥意思,不过-jar却是在命令行执行jar文件时必不可少的。那么我们可以在这里加上-jar试试。果然,加上之后再双击jar文件能正常运行了。

至此,我们就有了两种方法了。

推论

前面验证过了,对于jar文件,在已经设置默认应用的情况下是不能再通过普通方法修改默认应用的。也就是说当计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\UserChoice项的ProgId值为jarfile的时候,是不可能通过普2将其变成Applications\javaw.exe的,那是不是说明这个值对应的项也没有创建呢?让我们再来测试一下,首先还原到最初的默认应用设置,也就是默认应用为jdk15的javaw.exe(此时的ProgId值为jarfile),并且删除计算机\HKEY_CURRENT_USER\SOFTWARE\Classes\Applications\javaw.exe项,然后按普2操作,果然被删除的项并没有重新创建。

测试过程中发现计算机\HKEY_CLASSES_ROOT\Applications\javaw.exe项和计算机\HKEY_CURRENT_USER\SOFTWARE\Classes\Applications\javaw.exe项是关联的,删除一个另一个也跟着删除,修改也是一样,两者始终同步。

那么到这一步其实可以大致推测下在已经设置默认应用的情况下普2失败的原因了。普2选中jdk1.8的javaw.exe来打开目标jar文件,但是因为缺少-jar导致命令执行失败,转而用原有的默认应用打开jar文件,因此没有在注册表留下记录(创建计算机\HKEY_CURRENT_USER\SOFTWARE\Classes\Applications\javaw.exe项并改变计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\UserChoice项的ProgId值为Applications\javaw.exe)。但是如果jar文件还没有设置默认应用,那么将别无选择,只能以错误的方式(缺少-jar)执行命令,所以虽然jar文件没有运行起来,但是却在注册表留下了记录。

那么,在已经设置默认应用的情况下(ProgId值为jarfile时)我们手动在注册表的计算机\HKEY_CURRENT_USER\SOFTWARE\Classes\Applications项下创建javaw.exe项和其相关子项时会发生什么呢?

会发现在jar文件打开方式列表中出现了Java™ Platform SE binary(即jdk1.8的javaw.exe)选项。既然都能显示在打开方式的选项列表中,那必然也就可以通过普2来修改它为默认应用了。甚至我们会发现,只需使用普2,jar的默认应用可以随意在这两个应用间切换,因为它们都出现在打开方式的选项列表中。

这个发现也让我猜想文件打开方式列表中的选项是否和Applications项(包括计算机\HKEY_CURRENT_USER\SOFTWARE\Classes\Applications计算机\HKEY_CLASSES_ROOT\Applications)下的子项相对应,当然不同的文件类型对应不同的子项集合。对了,还有计算机\HKEY_CLASSES_ROOT\jarfile项也会出现在列表中。

最后

先就这样吧,没时间系统的学习注册表,自然也就无法融会贯通,只能把这些在尝试中总结的零碎经验记录下来供后续参考了。

如何在Windows10系统中修改.jar文件的默认应用相关推荐

  1. 计算机环境变量怎么恢复默认,windows10系统中环境变量怎么恢复默认

    有不少windows10系统用户在设置环境变量之后,可能不小心被恶意修改了导致出现问题,那么我们只需要将环境变量恢复默认即可,那么该怎么操作呢,本文就给大家讲解一下windows10系统中环境变量恢复 ...

  2. 怎么还原计算机字体库,如何在XP系统中恢复字库文件?WinXp系统恢复字库文件图文教程...

    最近有位深度技术XP系统用户反映自己在安装新XP系统时,虽然在重装系统前有把收藏的字体先备份了起来,但是复制时却发现字库文件根本无法复制进新系统,这该怎么办呢?接下来,小编就向大家分享在WinXp系统 ...

  3. 如何在ubuntu系统中修改时区?

    软硬件环境 ubuntu 18.04 64bit 简介 在ubuntu上,系统的时区可以在系统安装期间进行设置,同时也可以在之后的使用中更改.对于许多与系统相关的任务和流程,使用正确的时区非常重要.本 ...

  4. 如何在Windows系统中修改网卡的MAC地址?

    其实一共有3种方法,先介绍第一种方法 因为我安装的是 Windows 10 ,所以用这个系统演示 首先点击桌面左下角的 开始 按钮,然后点击 设置 按钮,打开 Windows设置 的界面 然后选择 网 ...

  5. xampp mac mysql 密码_max系统中修改xampp的mysql默认密码

    1 安装好xampp后可以把路径保存在.bashrc文件中 在终端输入"cd $HOME" ,进入用户的家目录 接下来输入"touch .bashrc",创建. ...

  6. java读取系统中指定的文件_java读取jar中指定的文件

    Java 档案 (Java Archive, JAR) 文件是基于 Java 技术的打包方案.它们允许开发人员把所有相关的内容 (.class.图片.声音和支持文件等) 打包到一个单一的文件中.JAR ...

  7. 如何在Win11重置系统中保留个人文件 Win11重置系统保留个人文件方法

    Win1系统是目前很多用户都在使用的电脑操作系统,但是最近安装的Win11系统有很多bug,很多用户想重置系统,但是不知道如何保留个人文件,下面小编就为大家详细的介绍一下,有需要的快来看看吧! Win ...

  8. win12服务器文件设置只读,如何在Win10系统中更改文件夹的只读或系统属性

    正常情况下通过右键属性只能更改文件的只读属性,系统win10属性则连相应选项都没有.那么如何在Win10系统中更改文件夹的只读或系统属性呢?下面跟着学习啦小编来一起了解下吧. 在Win10系统中更改文 ...

  9. 系统首选dns服务器修改,如何在Windows系统中设置首选DNS

    有时候可能需要修改或者调整 DNS 服务器地址的设置,以达到优化网络连接速度的效果.那么如何在Windows系统中设置首选DNS呢?具体请看下面学习啦小编介绍的操作方法! 在Windows系统中设置首 ...

最新文章

  1. python发送邮件和附件
  2. PetShop 4.0讨论专贴(QA)
  3. MDK编译后生成bin文件占用FLASH大小说明
  4. goip技术原理图解_12式木人桩模块化技术定型训练 1小念头
  5. Golang基本数据类型的相互转换
  6. Friday the Thirteenth
  7. 技校毕业计算机应用技术,技校计算机应用毕业生自我鉴定
  8. 版本控制系统相关知识
  9. 前端复习笔记(三)——JavaScript和JQuery
  10. mysql可以授予的权限包括多选题_mysql中的权限有( )。 (5.0分)_学小易找答案
  11. 读《微波工程(第三版)》笔记 (9:传输线模型)
  12. 音创linux版e100加歌,【图片】音创高清点歌机E100-3D版 火爆上市 现将资料爆出_点歌机吧_百度贴吧...
  13. HP 5100打印机在Windows 8中的使用
  14. SORPAS-焊接仿真模拟软件
  15. Tether市值十月下跌超过10亿美元
  16. rual 1741. Communication Fiend
  17. 【 unity3d 】NGUI playTween与Tween动画 脚本的使用
  18. jQuery笔记——工具函数——jQuery标志
  19. 钱颖一:人的创造力从哪里来?(转)
  20. 使用express脚手架创建项目

热门文章

  1. PYNQ例程一:1.3 PYNQ Overlays
  2. 自动填写人员信息表格——团支书办公自动化实战1
  3. adb命令行安装和卸载apk包到真机
  4. 电信天翼 java_电信天翼云对象存储java实现
  5. 在win10上安装Anaconda并运行python程序
  6. win10(版本1803,os ver 17134.165)内置Ubuntu子系统在vim中文乱码问题
  7. SpringBoot:简单使用RSocket的Demo
  8. .NET 使用sock5做代理(不是搭建服务端)
  9. webService 实战篇--客户端调用
  10. LinkedIn领英在什么情况下容易被封,提前学习避免进坑