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)

如何使用Inno Setup Compiler制作安装软件包

使用 Inno Setup 升级 Windows 服务