这次的报错处理想起来比较有意思,过程可以说是比较曲折的,但也是给人很多的启示。
一,事情起因
因为需要安装jdgui这个软件,看名字就可以知道是图形界面的一个软件,因此,下载的时候,选择了对图形界面支持比较好的Windows版本,从github网站下载下来这个软件后发现,需要jdk8.0环境才可以运行,遂,下载Windows的jdk8版本,因是使用该软件做一个测试,不想把自己的Windows7系统环境搞乱,因此,使用win8pro虚拟机,以建成一个沙盒系统。
虚拟机的主机信息如下图:
二,win8pro虚拟机的安装
这个没什么好说的,基础的知识,在此不做介绍了。只是有一点需要注意,要安装vmtools,以方便向这个沙盒传送文件。
三, 相关软件的下载(jdgui和jdk8,右键增加TrustedInstall注册表,Visual C++ Redistributable for Visual Studio 2015,44个api文件在test文件夹里)
链接:https://pan.baidu.com/s/1mSppmvoAiFb1oNlkmSsbCg
提取码:jdgu
四,jdk8的安装
环境变量的写入:
(末尾添加 :%JAVA_HOME%bin;%JAVA_HOME%jrebin)
和JAVA_HOME一样,新建一个名为“classpath”的环境变量,变量值为:%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar。如图所示:
不出意外的话,此时cmd里执行 java -version 命令会报错,如下图所示:
这个报错表示Windows的什么api文件没有,遂,百度开始,很多博客都说需要安装某个补丁或者安装vc库Visual C++ Redistributable for Visual Studio 2015 ,这没什么好说的,下载然后安装,可惜,这个vc库并不能正确安装,又报错啦!!!
1、安装vc2015 发行包,最后出错,提示需要先安装KB2999226 补丁。
2、安装KB2999226补丁,又提示需要安装win7 sp1(后来发现win8系统,也有同样问题)。
3、安装win7 sp1时,由于机器长期未正常打开update,安装sp1的时候,又遇到一个新的错误,各种补丁。
因此,可以相信,普通方法是不能解决这个报错的,那么,报错提示api-ms-win-crt-runtime-l1-1-0.dll文件丢失,在win8pro下查找一下,可以看到吗?答案是,肯定没有的。
无意打开网盘,刚好剪切板里是api-ms-win-crt-runtime-l1-1-0.dll,一搜竟然搜到了,这个文件在DOTA2的bin目录里(某次重装系统,把所有软件都备份到百度盘里了~~~~~~~~),遂在宿主机win7里寻找,发现很多软件里都有这个文件,如下图:
因DOTA2还是可以正常运行的,因此,进入DOTA2的bin目录下,拷贝所有api-ms开头的dll ,以及msvcp140.dll,vcruntime140.dll,ucrtbase.dll总计44个文件到c:windowssystem32目录下(这里,为什么是system32目录?因为我的jdk是64位的,如果是32位的jdk,路径是 c:windowssyswow64目录下)。这里,又出现问题了,无权限复制文件后覆盖文件,
此时,打开任意文件的属性可以看到,最高权限是TrustedInstall这个用户才拥有,而现在登录的用户是administrator,
因此,需要编写一个注册表文件,给鼠标右键添加切换TrustedInstall的功能,此文件的内容如下:
将以上内容保存到记事本内然后保存为reg文件即可,然后双击运行它。
等待cmd那个黑窗口关闭后就可以正常的复制啦:
jd-gui也可以正常运行啦,此时在安装 Visual C++ Redistributable for Visual Studio 2015 也不会报错啦!!~~~~~~
总结:
很多游戏或者开发工具为了系统适配,都会自带有api文件,也就是那44个文件,如果,你的Windows不能正常工作,到这些软件的bin目录下找齐这44个文件,然后复制到c:windowssystem32目录下,不需要安装任何补丁,你的软件就可以正常运行啦。例如,本例,我使用了宿主机的DOTA2的这些api文件,就可以很好的运行jdk啦,当然了,这里一定要注意,用jdk的bin目录下的这44个文件一样的可以哦。如下图:
执行下载的那个reg文件,然后到c:windowssystem32目录下,将system32文件夹下的每个api开始的文件都右键给予TrustedInstall权限,如下图所示:
可以看到,不需要安装vc2015库或者各种补丁也可以使用jdk啦,是不是十分方便???