Quelqu'un a-t-il une idée de la façon d'installer .NET framework avant l'installation dans INNO script ?
Réponses
Trop de publicités?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
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 .
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.