Java 无法运行自解压安装程序-无法访问jar文件C:\Users\Ray\AppData\Local\Temp\RarSFX0\install.jar
我有一个Java应用程序,Java 无法运行自解压安装程序-无法访问jar文件C:\Users\Ray\AppData\Local\Temp\RarSFX0\install.jar,java,windows,launch4j,winrar,izpack,Java,Windows,Launch4j,Winrar,Izpack,我有一个Java应用程序,Izpack安装程序用launch4j64bit包装,然后捆绑成一个自解压ZIP,使用WinRAR5.20创建,方法如 它对我和大多数客户都有效,但最近一些客户报告了如下错误: 无法访问jar文件C:\Users\Ray\AppData\Local\Temp\RarSFX0\install.jar 我无法重现这个错误 是什么导致了这个问题?它是否与Windows更新相关 自解压版本只有一个问题,一个用户必须自己解压的常规.zip文件工作正常 当我运行自解压存档时,它会正
Izpack
安装程序用launch4j64bit
包装,然后捆绑成一个自解压ZIP,使用WinRAR5.20创建,方法如
它对我和大多数客户都有效,但最近一些客户报告了如下错误:
无法访问jar文件C:\Users\Ray\AppData\Local\Temp\RarSFX0\install.jar
我无法重现这个错误
是什么导致了这个问题?它是否与Windows更新相关
自解压版本只有一个问题,一个用户必须自己解压的常规.zip文件工作正常
当我运行自解压存档时,它会正确地自解压。我们有这样的文件夹结构:
- 一个文件夹
JVM64
- 一个文件
install.jar
- 文件
和setup.exe
- 文件
setup.ico
JVM64
:
驱动器C中的卷没有标签。
卷序列号为A663-4CEF
C:\Users\gcdr\AppData\Local\Temp目录
14/08/2018 21:40 .
14/08/2018 21:40 ..
2018年8月14日21:40 RarSFX0
0个文件0个字节
C:\Users\gcdr\AppData\Local\Temp\RarSFX0目录
14/08/2018 21:40 .
14/08/2018 21:40 ..
2018年8月14日21:40 JVM64
0个文件0个字节
我发现有一个用户禁用Norton AntiVirus允许安装。现在我习惯于将每个新版本提交给诺顿白名单,但那个选项已经不存在了
为什么会这样?名为install.jar的文件会有一些限制吗?我花了一段时间才发现在运行SFX归档时到底发生了什么
songkong-windows64.exe
首先,我检测到临时目录%TEMP%\RarSFX0
仍然存在,尽管在安装完成后,SFX模块应该在SFX归档的开始将其删除,而不是真正安装应用程序。这是SFX模块根据存档注释文件中的SFX脚本命令执行的setup.exe
出现问题的第一个迹象,内容如下:
;下面的注释包含SFX脚本命令
Setup=Setup.exe
临时模式
Title=打开松空安装程序包
因此,我在包含setup.exe
的目录中创建了一个批处理文件,其中包含以下两行:
@setup.exe
@回显退出代码为:%ERRORLEVEL%
在执行批处理文件时,我可以在禁用用户帐户控制的命令提示窗口(完全授予管理权限,无提示)中看到选择安装语言的对话框窗口,同时在命令提示窗口中看到以下行:
退出代码为:0
这表明setup.exe
已终止,尽管安装尚未完成。因此,它看起来像是一个小型的启动程序应用程序,它并不真正进行安装,而是在安装完成甚至真正开始之前自行终止。那不好
我使用了next free Sysinternal,在运行songkong-windows64.exe
时查看了该工具记录的文件系统访问,并确认了我的假设:setup.exe
只是在SFX模块创建的文件夹中运行JVM64\bin\javaw.exe
,参数为-jar
和install.jar
RarSFX0
,RarSFX1
这是非常糟糕的,因为在使用TempMode
进行SFX归档时,WinRAR。之后可以阅读
- 在第一个菜单项的“帮助主题”上,在最后一个菜单的“帮助”中单击“运行WinRAR”
- 单击左侧[+]符号上第一个选项卡上的下一步,列出项目自解压模块
- 双击子列表项GUI SFX模块:设置命令和
- 点击链接TempMode:
setup.exe
并不能满足这一非常重要的要求,它在启动真正的安装过程后立即终止
SFX模块尝试删除临时目录RarSFX0
,但Windows阻止删除,因为JVM64\bin\javaw.exe
仍在运行,并且install.jar
当前由Java可执行文件打开。好,根据CPU和硬盘性能的不同,目录RarSFX0
中包括install.jar
在内的所有文件都可能在javaw.exe
启动真正完成之前被删除,并且该可执行文件打开了文件install.jar
,而子目录JVM64
肯定永远无法删除由于javaw.exe而被删除