Warm tip: This article is reproduced from serverfault.com, please click

Starting .NET Core installer using Inno Setup fails with result code 2

发布于 2020-11-28 10:16:18

I'm trying to build up an installer using Inno Setup. I need to setup a prerequisite installation for .NET Core framework. By far I'm able to detect .NET Core existence. But I'm having difficulty with executing the installation.

Here's the code I have by far:

[Files]
Source: "\\shared\path\dotnet-runtime-3.1.10-win-x64.exe"; DestDir: "{tmp}"; \
  Flags: deleteafterinstall; BeforeInstall: InstallFramework; \
  Check: FrameworkIsNotInstalled

[Code]
var 
  CancelWithoutPrompt: boolean;
  InstallValue: Cardinal;

function InitializeSetup(): Boolean;
begin
  CancelWithoutPrompt := false;
  result := true;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if CurPageID=wpInstalling then
    Confirm := not CancelWithoutPrompt;
end;
             
function FrameworkIsNotInstalled: Boolean;
begin
  Result := not RegQueryDWordValue(HKEY_LOCAL_MACHINE, 
    'SOFTWARE\WOW6432Node\dotnet\Setup\InstalledVersions\x64\sharedfx\Microsoft.NETCore.App', 
    '3.1.10', InstallValue) or (InstallValue <> 1)
end;

procedure InstallFramework;
var
  StatusText: string;
  ResultCode: Integer;
begin
  StatusText := WizardForm.StatusLabel.Caption;
  WizardForm.StatusLabel.Caption := 'Installing .net core framework...';
  WizardForm.ProgressGauge.Style := npbstMarquee;
  try
    if not Exec(ExpandConstant('{tmp}\dotnet-runtime-3.1.10-win-x64.exe'), '/q /norestart', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then     
    begin
      // you can interact with the user that the installation failed
      MsgBox('.NET Core installation failed with code: ' + IntToStr(ResultCode) + '.',
        mbError, MB_OK);
      CancelWithoutPrompt := true;
      WizardForm.Close;       
    end;
  finally
    WizardForm.StatusLabel.Caption := StatusText;
    WizardForm.ProgressGauge.Style := npbstNormal;
  end;
end;

I'm getting result code 2 response from the installation, anyone could enlighten me what's code 2 error about? Or is that any way I could extract further detail on the error information? I tried empty argument and tried to search for Code 2 error information on the internet but still no luck. I had tried with Shellexec and both return the same result

The installation directly using the .net exe are working fine locally

Any help or information would be much appreciate =)

Questioner
ragk
Viewed
0
Martin Prikryl 2020-11-30 15:05:51

You are trying to run the dotnet-runtime-3.1.10-win-x64.exe before you actually "install" it to the {tmp}:

BeforeInstall: InstallFramework

You have to use the AfterInstall parameter:

AfterInstall: InstallFramework