- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个Java应用程序,Izpack
安装程序用launch4j64bit
包装,然后 bundle 为自解压ZIP,使用How do I make a self extract and running installer?的答案中所述的方法,用 WinRAR 5.20创建
它对我和大多数客户都有效,但是最近有一些客户报告了这样的错误:
Unable to access jarfile C:\Users\Ray\AppData\Local\Temp\RarSFX0\install.jar
JVM64
,install.jar
,setup.exe
和setup.ico
。 JVM64
:
Volume in drive C has no label.
Volume Serial Number is A663-4CEF
Directory of C:\Users\gcdr\AppData\Local\Temp
14/08/2018 21:40 <DIR> .
14/08/2018 21:40 <DIR> ..
14/08/2018 21:40 <DIR> RarSFX0
0 File(s) 0 bytes
Directory of C:\Users\gcdr\AppData\Local\Temp\RarSFX0
14/08/2018 21:40 <DIR> .
14/08/2018 21:40 <DIR> ..
14/08/2018 21:40 <DIR> JVM64
0 File(s) 0 bytes
最佳答案
我花了一段时间才了解运行SFX存档songkong-windows64.exe
的实际情况。
首先,我检测到临时目录%TEMP%\RarSFX0
仍然存在,尽管安装完成后无论是否安装该应用程序,都应在SFX归档文件的开头由SFX模块将其删除。这是第一个迹象,表明SFX模块根据存档注释文件中包含内容的SFX脚本命令执行的setup.exe
出了问题:
;The comment below contains SFX script commands
Setup=setup.exe
TempMode
Title=Unpacking SongKong Installer
setup.exe
的目录中创建了一个批处理文件:
@setup.exe
@echo Exit code is: %ERRORLEVEL%
Exit code is: 0
setup.exe
已终止,尽管根本没有完成安装。因此,看来
setup.exe
只是一个小型启动器应用程序,它实际上并未执行安装,并会在安装完成或什至真正开始之前自行终止。这是不好的。
songkong-windows64.exe
时查看了此工具记录的文件系统访问,并确认了我的假设:
setup.exe
只是在SFX模块创建的文件夹
JVM64\bin\javaw.exe
,
-jar
,..中运行带有
install.jar
和
RarSFX0
参数的
RarSFX1
。 。
TempMode
用于SFX存档非常糟糕。以后可以看
In TempMode SFX needs to detect the termination of setup program to delete temporary files. Such approach works correctly if setup program is not terminated before installation is done. But sometimes the setup program starts a child process and terminates, expecting a child process to complete installation. In such case SFX deletes temporary files immediately after detecting that main setup application is finished, resulting in malfunctioning child process. So TempMode works correctly only with those setup programs, which do not start another processes or, at least, are not terminated until all child processes are finished.
setup.exe
不能满足这个非常重要的要求,它在开始实际安装过程后立即终止。
RarSFX0
,但是Windows阻止了此操作,因为
JVM64\bin\javaw.exe
仍在运行,并且Java可执行文件当前已打开
install.jar
。好吧,根据CPU和硬盘性能的不同,可能会发生以下情况:在
RarSFX0
的启动真正完成之前,已经删除了
install.jar
目录中的所有文件,包括
javaw.exe
,并且该可执行文件打开了文件
install.jar
,而子目录
JVM64
绝对不能删除,因为
javaw.exe
是始终在此刻运行,或被防病毒应用程序扫描以查找有害代码。
setup.exe
,而是直接由SFX模块使用所需的参数运行
javaw.exe
。
C:\Temp
包含:
CreateSFX.bat
包含以下命令行:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SourceFolder=%~dp0"
set "SourceFolder=%SourceFolder:~0,-1%"
set "CommentFile=%SourceFolder%\Setup.txt"
for %%I in ("%SourceFolder%") do set "ArchiveFile=%%~dpIsongkong-windows64.exe"
if not exist "%CommentFile%" (
echo ;The comment below contains SFX script commands
echo/
echo Setup=JVM64\bin\javaw.exe -jar install.jar
echo TempMode
echo Title=Unpacking SongKong Installer
)>"%CommentFile%"
del "%ArchiveFile%" 2>nul
rem Create solid RAR5 SFX archive using best compression with 64 MB dictionary size.
echo Create RAR SFX, please wait ...
"%ProgramFiles%\WinRAR\WinRar.exe" a -@ -afrar -cfg- -ep1 -ibck -iicon"%SourceFolder%\setup.ico" -k -m5 -ma5 -md64m -r -s -sfx"%ProgramFiles%\WinRAR\SfxModule\Default64.sfx" -x"%SourceFolder%\Setup.*" -x"%~f0" -tl -y -z"%CommentFile%" -- "%ArchiveFile%" "%SourceFolder%\"
rem Create ZIP SFX archive using best compression.
rem echo Create ZIP SFX, please wait ...
rem "%ProgramFiles%\WinRAR\WinRar.exe" a -@ -afzip -cfg- -ep1 -ibck -iicon"%SourceFolder%\setup.ico" -m5 -r -sfx"%ProgramFiles%\WinRAR\Zip64.sfx" -x"%SourceFolder%\Setup.*" -x"%~f0" -tl -y -z"%CommentFile%" -- "%ArchiveFile%" "%SourceFolder%\"
endlocal
C:\Temp\SongKong64\Setup.txt
:
;The comment below contains SFX script commands
Setup=JVM64\bin\javaw.exe -jar install.jar
TempMode
Title=Unpacking SongKong Installer
JVM64\bin\javaw.exe
和
setup.exe
运行
-jar
而不是
install.jar
。在使用相对路径运行
javaw.exe
之前,SFX模块将临时目录作为当前目录。
WinRAR.exe
,以创建SFX存档
C:\Temp\songkong-windows64.exe
,其中不包括
Setup.*
中的所有
C:\Temp\SongKong64
文件以及批处理文件
CreateSFX.bat
。
javaw.exe
终止,并按预期删除临时目录
RarSFX0
。
setup.exe
定义了特殊的环境变量或修改了
javaw.exe
的当前目录。
javaw.exe
应该以本地管理员的提升权限运行,则可以添加
WinRAR 开关
-iadm
来创建SFX存档,当在Windows Vista及更高版本中启动时,该SFX存档请求管理访问权限。
call /?
解释%~dp0
...驱动器和批处理文件的路径,它们以反斜杠结尾,该斜杠在下一个命令行中删除。 del /?
endlocal /?
for /?
if /?
rem /?
set /?
setlocal /?
关于java - 无法运行自解压安装程序-无法访问jarfile C :\Users\Ray\AppData\Local\Temp\RarSFX0\install. jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51791532/
for x in [temp for temp in xlist if temp xmax: continue 会起作用。 (你的 for 循环的其余部分是做什么的?)如果它可以只使用一个 list-
我正在学习 C 的 udemy 类(class),发现这个问题不是都声明是相同的吗?如果是,为什么答案不同 源代码: #include void swap(int *a, int *b){
#include #include void test( int * ); struct node { int data; struct node * next; }; int m
所以我在练习一些链表问题,但我一直把假设弄混了//这是一个只有头部的单向链表 // what is the difference between ListNode temp = head; while
我有一个 Windows Server 2008 32 位,当我输入 %temp% 时,它会将我带到 ..AppData\Local\Temp\1\或 ..AppData\Local\Temp\2 而
在学习链表编码的过程中,我遇到了这两个东西,无法理解它们之间的区别,让我感到困惑。我一直在学习的这本书在我们在链表末尾添加新节点的部分解释了“temp=*q”。 So, if the list is
谁能说出下面代码的内部过程 //instead of 1 it displays -1 最佳答案 echo ~$temp; ^bitwise not operator 假设 32 位
我想知道hadoop.tmp.dir和mapred.temp.dir有什么区别,而且mapred.temp.dir [不建议使用]与mapreduce.cluster.temp.dir有何不同 最佳答
我的输入来自使用 DataInputSteam 的 socket,并且因为我可以将多个不同的字符串值全部分配给同一个 clientDayOfWeek 字符串,我无法弄清楚如何将进入同一个 ArrayL
在做一些基于二叉搜索树的问题时......我在函数调用中有点困惑: void find(node* root,node*& temp) { blah blah... } int main()
为什么下面的代码不起作用?据我所知,当 temp 达到 NULL 时,(new)ing 它应该创建一个 temp 指向它的新节点。奇怪的是,将 while 条件更改为 temp->next!=NULL
我有一个 JMenuItem 实例(比如说 TEMP)。我想知道添加了 TEMP 的 JMenu 的名称是什么。我该怎么做? 最佳答案 您可以尝试以下代码来获取给定 JMenuItem 的 JMenu
我得到了相同的结果,有什么区别?哪个更好?temp 是一个 int,从 reader.read() 读取 System.out.print((char)temp); System.out.print(
我试图通过以下示例中的 temp 变量检查“temp = ( volatile 无符号短*) add ”中的添加值: main() { unsigned short add = 0x01;
我有一个网络作业,在 %temp% 文件夹中写入一些数据,该文件夹映射到 d:\local\temp。 当我在 Azure 门户上使用控制台工具时,数据就在那里,位于 d:\local\temp 上。
我有下面的内容,用作启动 powershell 的批处理文件(太长,无法详细介绍,但它在另一个脚本中使用)。 无论如何,我注意到 %systemroot%\temp 和 %systemroot% 不起
我尝试在这里和整个 Internet 上进行研究,但由于伪代码编写相当多样化,许多人使用不同的符号来表示不同的事物,我找不到任何可能符合我的问题的内容。 给定以下内容:n 阶数组 A(不一定已经排序)
Replace Temp with Query 重构方法现在被广泛推荐,但是似乎效率很低, yield 很小。 Martin Fowler 网站的方法给出了以下示例: 将表达式提取到方法中。用表达式替
当我们有什么操作需要使用到命令的就可以打开运行,然后直接向里面输入命令就可以完成一些操作。因为有用户想知道%temp%输入命令行是什么意思,所以小编就来为大家解答了这个命令的意思,它一般是用于清除垃
我知道之前有人问过这方面的变体(例如 https://groups.google.com/forum/#!topic/snakemake/4kslVBX2kew ),但我没有看到明确的解决方案。 如果
我是一名优秀的程序员,十分优秀!