当前位置: 首页 > 面试题库 >

如何从Inno Setup安装JRE?

穆俊名
2023-03-14
问题内容

我正在尝试通过Inno Setup(以及另一个应用程序)安装最新的平台(x64或x86)合适的Java Runtime
Environment。我找到了一些脚本示例,这些脚本示例说明了如何检测版本并在正确的情况下进行安装并使其适应我的需要,但我一直遇到以下问题:

无法打开文件“ path \ to \ JREInstall.exe”:
CreateProcess失败:代码5:
拒绝访问

这是严格负责安装JRE的代码:

[Setup]
AppName="JRE Setup"
AppVersion=0.1
DefaultDirName="JRE Setup"

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Files]
Source: "jre-8u11-windows-x64.exe"; DestDir: "{tmp}\JREInstall.exe"; \
    Check: IsWin64 AND InstallJava();
Source: "jre-8u11-windows-i586.exe"; DestDir: "{tmp}\JREInstall.exe"; \
    Check: (NOT IsWin64) AND InstallJava();

[Run]
Filename: "{tmp}\JREInstall.exe"; Parameters: "/s"; \
    Flags: nowait postinstall runhidden runascurrentuser; Check: InstallJava()

[Code]

procedure DecodeVersion(verstr: String; var verint: array of Integer);
var
  i,p: Integer; s: string;
begin
  { initialize array }
  verint := [0,0,0,0];
  i := 0;
  while ((Length(verstr) > 0) and (i < 4)) do
  begin
    p := pos ('.', verstr);
    if p > 0 then
    begin
      if p = 1 then s:= '0' else s:= Copy (verstr, 1, p - 1);
      verint[i] := StrToInt(s);
      i := i + 1;
      verstr := Copy (verstr, p+1, Length(verstr));
    end
    else
    begin
      verint[i] := StrToInt (verstr);
      verstr := '';
    end;
  end;
end;

function CompareVersion (ver1, ver2: String) : Integer;
var
  verint1, verint2: array of Integer;
  i: integer;
begin
  SetArrayLength (verint1, 4);
  DecodeVersion (ver1, verint1);

  SetArrayLength (verint2, 4);
  DecodeVersion (ver2, verint2);

  Result := 0; i := 0;
  while ((Result = 0) and ( i < 4 )) do
  begin
    if verint1[i] > verint2[i] then
      Result := 1
    else
      if verint1[i] < verint2[i] then
        Result := -1
      else
        Result := 0;
    i := i + 1;
  end;
end;

function InstallJava() : Boolean;
var
  ErrCode: Integer;
  JVer: String;
  InstallJ: Boolean;
begin
  RegQueryStringValue(
    HKLM, 'SOFTWARE\JavaSoft\Java Runtime Environment', 'CurrentVersion', JVer);
  InstallJ := true;
  if Length( JVer ) > 0 then
  begin
    if CompareVersion(JVer, '1.8') >= 0 then
    begin
      InstallJ := false;
    end;
  end;
  Result := InstallJ;
end;

在完整的安装脚本中,相同的消息继续出现。如何从该脚本化安装文件中运行JRE安装程序?


问题答案:

我能够找出问题所在:很明显,我在使用这些行时弄错了:

Source: "jre-8u11-windows-x64.exe"; DestDir: "{tmp}\JREInstall.exe"; Check: IsWin64 AND InstallJava();
Source: "jre-8u11-windows-i586.exe"; DestDir: "{tmp}\JREInstall.exe"; Check: (NOT IsWin64) AND InstallJava();

他们应该像这样:

Source: "jre-8u11-windows-x64.exe"; DestDir: "{tmp}"; DestName: "JREInstall.exe"; Check: IsWin64 AND InstallJava();
Source: "jre-8u11-windows-i586.exe"; DestDir: "{tmp}"; DestName: "JREInstall.exe"; Check: (NOT IsWin64) AND InstallJava();

这似乎已经解决了问题。

另外这行我被误认为:

Filename: "{tmp}\JREInstall.exe"; Parameters: "/s"; Flags: nowait postinstall runhidden runascurrentuser; Check: InstallJava()

应该是:

Filename: "{tmp}\JREInstall.exe"; Parameters: "/s"; Flags: nowait runhidden runascurrentuser; Check: InstallJava()

这是我使用此特定工具的有限经验所能提供的最佳解决方案。如果有机会,我将研究PrepareToInstall选项,但这暂时有效。



 类似资料:
  • 问题内容: 我想知道是否可以在不离开IPython shell的情况下安装python软件包。 问题答案: 您可以使用以下前缀: 该前缀是一个短手的命令运行shell命令。 您还可以使用前缀,该前缀是命令的简写形式,用于执行shell命令并捕获其输出(默认情况下保存到变量中)。

  • 我试图运行的python2.7和我不断得到同样的错误。我按照http://bickson.blogspot.com/2011/02/installing-blaslapackitpp-on-amaon-ec2.html的说明安装了LAPACK/BLAS,我认为应该已经解决了这个问题。没有任何帮助。我做错了什么?我对bash不太熟悉。

  • 尝试从github安装模块会导致: package.json上的ENOENT错误。 使用Express轻松复制: 引发错误。 可以工作。 为什么我不能从GitHub安装? 以下是控制台输出:

  • 问题内容: 。已记录的重新安装Python和openssl的解决方法不起作用,因此我决定卸载并重新安装Python。 问题是,当您尝试通过brew安装Python 2时,会收到以下消息: 不幸的是,我仍然有许多取决于Brew的python @ 2的brew公式。这些包括,,PR例如 我不知道如何使用他们记录的命令重新安装Python @ 2。它需要一个公式和一个水龙头。我想公式会是。我不确定水龙头

  • 如何安装和使用DirectX 返回上级 1、编译库和运行库 2、安装 VC++ 5.0 3、安装 DirectX5.0 的 SDK 4、DirectX 5.0 的文件说明 5、卸载 DirectX 1、编译库和运行库 为了能够使用MS VC++5.0进行DirectX编程,必须拥有一套DirectX的SDK(软件开发工具包),它包括了编译DirectX应用程序所需要的编译库文件(*.lib)、头文

  • 问题内容: 我找不到在Mac上安装MySQLi的说明。需要明确的是,MySQL是最新的,并且我正在运行PHP5。如何安装它?我什至可以从哪里得到它?谢谢你的帮助。我将给回答这个问题的人一个投票和一个复选标记! 问题答案: MySQLi是PHP的一部分。应该有一个可用的php- mysqli类型程序包,或者您可以获取PHP源代码并重新编译启用mysqli的程序。您可能已经安装了它,但是它作为一个模块