How do I install .NET Framework only when it's not already installed?

.net, inno-setup

Solution

The easiest you can do, is to use the `Check` parameter, which allows you to control if a certain file from the `[Files]` section will be extracted, or if a certain program from the `[Run]` section will be executed. The following script code shows its usage for the conditional installation of the .NET Framework 4:

[Files]
Source: "dotNetFx40_Full_setup.exe"; DestDir: {tmp}; \
  Flags: deleteafterinstall; Check: FrameworkIsNotInstalled

[Run]
Filename: "{tmp}\dotNetFx40_Full_setup.exe"; Check: FrameworkIsNotInstalled

[Code]

function FrameworkIsNotInstalled: Boolean;
begin
  Result :=
    not RegKeyExists(
      HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\.NETFramework\policy\v4.0');
end;

Problem

Is there a way to check if the .NET Framework 4 has been installed and install it only when it's not in the system? I know, how do I determine, if the .NET Framework 4 is installed by checking the following registry key? ``` hasDotnet4 := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\.NETFramework\policy\v4.0'); ``` How do I conditionally run the .NET Framework 4 installation based on the above check?

Original source