如何在Windows10系统中修改.jar文件的默认应用 您所在的位置:网站首页 怎样默认应用设置 如何在Windows10系统中修改.jar文件的默认应用

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

#如何在Windows10系统中修改.jar文件的默认应用| 来源: 网络整理| 查看: 265

普通方式(无效)

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

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

但是,这两种方式对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项也会出现在列表中。

最后

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有