Inno Setup 临时部署的 Java 安装程序包含在安装大小中
Posted
技术标签:
【中文标题】Inno Setup 临时部署的 Java 安装程序包含在安装大小中【英文标题】:Java installer temporarily deployed by Inno Setup is included in installation size 【发布时间】:2018-06-16 17:24:10 【问题描述】:[Files]
#define JavaInstaller "jre-8u151-windows-x64.exe"
Source: "#JavaInstaller"; DestDir: "tmp";
[Run]
Filename: "tmp/#JavaInstaller"; Parameters: "SPONSORS=0"; \
StatusMsg: "Java Runtime Enviroment not installed on your system. Installing..."; \
Check: not isJavaInstalled
[Code]
const
REQUIRED_JAVA_VERSION = '1.7';
function isJavaInstalled(): Boolean;
var
JavaVer : String;
tmpFileName,
pathJavaExe: String;
isGoodJavaVersion,
isFoundJavaPath: Boolean;
ResultCode: Integer;
ExecStdout: AnsiString;
begin
*** check in registry
sets variables:
JavaVer
isGoodJavaVersion
if RegQueryStringValue(HKLM, 'SOFTWARE\JavaSoft\Java Runtime Environment',
'CurrentVersion', JavaVer) AND (JavaVer <> '') OR
RegQueryStringValue(HKLM64, 'SOFTWARE\JavaSoft\Java Runtime Environment',
'CurrentVersion', JavaVer) AND (JavaVer <> '') then begin
Log('* Java Entry in Registry present. Version: ' + JavaVer);
isGoodJavaVersion := CompareStr(JavaVer, REQUIRED_JAVA_VERSION) >= 0;
end;
add additional checks, for example by searching the PATH,
or by running `java -version`
Result := isGoodJavaVersion;
end;
我是使用 Inno Setup 的初学者。我正在尝试使用上面的代码为“MyProgram”制作安装程序。
作为安装的一部分,安装程序需要检查是否安装了 Java,如果没有安装。
我遇到的问题是安装程序安装了“MyProgram”,但它也安装了“jre-8u151-windows-x64.exe”作为“MyProgram”的一部分。
因此,“MyProgram”的安装不是大约 10Mb,而是 75mB。从我读到的加载到“tmp 应该在 exe 运行后自动卸载,但在这种情况下它似乎没有发生。
【问题讨论】:
您的问题含糊不清。 1)您的意思是安装完成后,jre-8u151-windows-x64.exe
仍保留在tmp
中吗? 2) 还是您的问题是安装程序 (mysetup.exe
) 太大(因为它包含 jre-8u151-windows-x64.exe
)?
抱歉造成误会。我的意思是,即使安装了 java,jre-8u151-windows-x64.ex 也是我本地机器上安装的一部分。如果在本地机器上安装了 Java,就会发生这种情况。
对不起,这和以前一样模棱两可。 “在我的本地机器上安装的一部分”是什么意思?更加详细一些。 jre-8u151-windows-x64.exe
在哪里/如何成为安装的一部分?
如果我取出这一行 "#JavaInstaller";目标目录:“tmp”;然后当 MyProgam 安装并且只有 8Mb 左右。但是,如果我包含该行,MyProgram 安装并且是 75Mb,我认为这是由于 Java 安装程序被安装为 MyProgram 安装的一部分。
【参考方案1】:
我假设您的意思是,jre-8u151-windows-x64.exe
包含在程序卸载条目的EstimatedSize
字段中。它实际上并不占用磁盘上的任何空间。对吧?
这个was a bug in Inno Setup。它已在 Inno Setup 5.6 中修复。
在早期版本中,要解决该错误,您可以使用ExtractTemporaryFile
以编程方式提取安装程序,而不是使用[Files]
部分。
[Files]
Source: "#JavaInstaller"; Flags: dontcopy
[Run]
Filename: "tmp/#JavaInstaller"; Parameters: "SPONSORS=0"; \
StatusMsg: "Java Runtime Environment not installed on your system. Installing..."; \
Check: not isJavaInstalled; BeforeInstall: ExtractInstaller
[Code]
function isJavaInstalled(): Boolean;
begin
...
end;
procedure ExtractInstaller;
begin
ExtractTemporaryFile('#JavaInstaller');
end;
【讨论】:
感谢您的帮助,它似乎一切正常,但随后出现错误消息“异常内部错误:ExtractTemporaryFile:找不到文件“jre-8u151-windows-64.exe。 您有Source: "#JavaInstaller"; Flags: dontcopy
条目吗?
我已对其进行了更改,以便在下一个版本中修复此问题。感谢您的报告。以上是关于Inno Setup 临时部署的 Java 安装程序包含在安装大小中的主要内容,如果未能解决你的问题,请参考以下文章
在安装过程中使用 Inno Setup 删除另一个未随 Inno Setup 安装的应用程序
我可以告诉 Inno Setup *not* 创建 unins000 文件吗
inno setup将 exe文件和.NETFramework如何一起打包
Windows 7 上错误的桌面快捷方式图标(Inno Setup)