3 votes

Installer le .Net framework avec mon application avec Inno setup

Quelqu'un a-t-il une idée de la façon d'installer .NET framework avant l'installation dans INNO script ?

4voto

torno Points 426

Il s'agit d'une solution complète pour toutes les versions de .Net et les logiciels supplémentaires : CodeProject

p.s. Je sais que cette question est assez ancienne, mais ce projet devrait faire partie des réponses...

[EDIT par @jitbit] : La dernière source de l'article de CodeProject se trouve ici : https://github.com/stfx/innodependencyinstaller

2voto

Wim Coenen Points 41940

Vous pouvez utiliser un [Run] section pour lancer un exécutable. Le programme d'installation .NET redistribuable est un exécutable. Par exemple, vous pouvez téléchargez le programme d'installation pour .NET 2.0 ici .

Voir également le Documentation sur Inno Setup .

0voto

Vic Points 862

Voici une solution possible, à l'intérieur de la méthode InitializeWizard() vous vérifiez dans le registre la version spécifique du .net framework dont vous avez besoin, si elle n'est pas présente, alors vous pouvez inclure, en tant que partie de votre installateur inno, l'installateur web du framework, et vous pouvez l'exécuter, et attendre qu'il se termine, et selon qu'il a été installé avec succès ou non, vous pouvez choisir de continuer ou d'abandonner l'installation.

N'oubliez pas non plus que certains installateurs de .net framework peuvent exiger un redémarrage après l'installation. Dans ce cas, vous pouvez également inclure une clé dans le registre, sous les clés run-once ou run, afin que votre installateur soit appelé après le redémarrage (dans le cas où l'utilisateur a choisi de redémarrer immédiatement après l'installation).

En voici un exemple :

function CheckIfFrameworkNeeded(): Boolean;
var
  VersionFrameWork: Cardinal;
  FrameWorkNeeded: Boolean;
begin
  FrameWorkNeeded := true;
   //**********************************************************************
   //  Check Fot Framewok 3.5.
   //**********************************************************************
    if (RegQueryDWordValue(HKLM, 'Software\Microsoft\NET Framework Setup\NDP\v3.5', 'Install', VersionFrameWork)) then
    begin
      if (VersionFrameWork = 1) then
          FrameWorkNeeded := false
    end;

   Result := FrameWorkNeeded;
end;

function Install_NETFramework() : Integer;
var
  hWnd: Integer;
  ResultCode: Integer;
  dotnetRedistPath: string;
  outVar : string;
begin

  dotnetRedistPath:= ExpandConstant('{tmp}\dotnetfx35setup.exe');

  //*********************************************************************************
  // Run the install file for .NET Framework 3.5. This is usually dotnetfx35setup.exe from MS
  //***********************************************************************************

  if Exec(ExpandConstant(dotnetRedistPath), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
  begin
     // ResultCode contains the exit code
     case ResultCode of
     // 1641 The requested operation completed successfully. The system will be restarted so the changes can take effect.
     // 3010 The requested operation is successful. Changes will not be effective until the system is rebooted.
     1641:
     begin
        Result := 1;
     end
     3010, 0:
     begin
        Result := 0;
     end else // -> case default
     begin
        Result := -1;
     end
  end;
  end else
  begin
     //handle failure if necessary; ResultCode contains the error code
     Result := -1;
  end;
end;

procedure InitializeWizard();
var
   frameworkNeeded: Boolean;
   installerPath: String;
   res: integer;
begin
  frameworkNeeded := CheckIfFrameworkNeeded();
  if (frameworkNeeded = true)then
  begin
    if MsgBox('This setup requires the .NET Framework 3.5.'#13 + 'The .NET Framework can be obtained from the web.'#13 + 'Would you like to do this now?', mbConfirmation, MB_YESNO) = IDYES then
    begin
      // register in the registry the path to your current installer, so it gets called after a reboot
      RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'MyAppKey', installerPath); // installerPath is the path of your installer
      res := Install_NETFramework();
      case res of
        1:  // a restart is going to be executed right away so we abort to avoid the reboot from happening
        begin
          Abort;
        end
        0: // a restart is going to be executed later
        begin
          //Delete the key we added before since we don't need it cause we are installing now
          RegDeleteValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'MyAppKey');
          // continue with your installation here
        end
        -1: // an error happened
        begin
          Abort;
        end
      end;
      end else
       begin
        //The user has chosen not to install the framework
        MsgBox('The application can not be installed unless the framework 3.5 be installed first.', mbError, MB_OK);
        Abort;
       end;
      end else
     begin
      // the framework is present so continue with your installation here
     end;
end;

Je pense que vous devez encore trouver un moyen d'obtenir le chemin de l'installateur d'exécution, si vous voulez définir la clé sur le registre, mais à part cela, je pense que ce code peut vous aider avec votre question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X