J'ai un composant qui nécessite l'exécution de .NET 4.0, comment mon programme d'installation Inno Setup peut-il vérifier qu'il est installé et, dans le cas contraire, il invite l'utilisateur à l'installer?Inno Setup: Vérifiez que .NET 4.0 est installé
Répondre
La fonction InitializeSetup
est appelée lors de l'exécution de l'exécutable Inno Setup. L'insertion de ce code pour un script personnalisé doit faire ce que vous voulez:
function IsDotNetDetected(version: string; service: cardinal): boolean;
// Indicates whether the specified version and service pack of the .NET Framework is installed.
//
// version -- Specify one of these strings for the required .NET Framework version:
// 'v1.1' .NET Framework 1.1
// 'v2.0' .NET Framework 2.0
// 'v3.0' .NET Framework 3.0
// 'v3.5' .NET Framework 3.5
// 'v4\Client' .NET Framework 4.0 Client Profile
// 'v4\Full' .NET Framework 4.0 Full Installation
// 'v4.5' .NET Framework 4.5
// 'v4.5.1' .NET Framework 4.5.1
// 'v4.5.2' .NET Framework 4.5.2
// 'v4.6' .NET Framework 4.6
// 'v4.6.1' .NET Framework 4.6.1
// 'v4.6.2' .NET Framework 4.6.2
// 'v4.7' .NET Framework 4.7
//
// service -- Specify any non-negative integer for the required service pack level:
// 0 No service packs required
// 1, 2, etc. Service pack 1, 2, etc. required
var
key, versionKey: string;
install, release, serviceCount, versionRelease: cardinal;
success: boolean;
begin
versionKey := version;
versionRelease := 0;
// .NET 1.1 and 2.0 embed release number in version key
if version = 'v1.1' then begin
versionKey := 'v1.1.4322';
end else if version = 'v2.0' then begin
versionKey := 'v2.0.50727';
end
// .NET 4.5 and newer install as update to .NET 4.0 Full
else if Pos('v4.', version) = 1 then begin
versionKey := 'v4\Full';
case version of
'v4.5': versionRelease := 378389;
'v4.5.1': versionRelease := 378675; // 378758 on Windows 8 and older
'v4.5.2': versionRelease := 379893;
'v4.6': versionRelease := 393295; // 393297 on Windows 8.1 and older
'v4.6.1': versionRelease := 394254; // 394271 before Win10 November Update
'v4.6.2': versionRelease := 394802; // 394806 before Win10 Anniversary Update
'v4.7': versionRelease := 460798; // 460805 before Win10 Creators Update
end;
end;
// installation key group for all .NET versions
key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + versionKey;
// .NET 3.0 uses value InstallSuccess in subkey Setup
if Pos('v3.0', version) = 1 then begin
success := RegQueryDWordValue(HKLM, key + '\Setup', 'InstallSuccess', install);
end else begin
success := RegQueryDWordValue(HKLM, key, 'Install', install);
end;
// .NET 4.0 and newer use value Servicing instead of SP
if Pos('v4', version) = 1 then begin
success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount);
end else begin
success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount);
end;
// .NET 4.5 and newer use additional value Release
if versionRelease > 0 then begin
success := success and RegQueryDWordValue(HKLM, key, 'Release', release);
success := success and (release >= versionRelease);
end;
result := success and (install = 1) and (serviceCount >= service);
end;
function InitializeSetup(): Boolean;
begin
if not IsDotNetDetected('v4.6', 0) then begin
MsgBox('MyApp requires Microsoft .NET Framework 4.6.'#13#13
'Please use Windows Update to install this version,'#13
'and then re-run the MyApp setup program.', mbInformation, MB_OK);
result := false;
end else
result := true;
end;
(code pris d'ici: http://www.kynosarges.de/DotNetVersion.html)
D'abord, il vérifie la présence d'une entrée de registre qui indique la version du. Framework NET installé. Si l'entrée de Registre n'est pas présente, il invite l'utilisateur à télécharger le framework .NET. Si l'utilisateur dit Oui, il ouvre l'URL de téléchargement. (Vous devrez peut-être modifier la version qu'il spécifie dans le script à la version 4.0.)
aussi je suis tombé sur this article on CodeProject, qui peut être une manière plus complète et personnalisable de faire ce que vous cherchez, même si elle peut prendre plus de travail à comprendre et devra être modifié pour fonctionner avec la version 4.0.
@Cody Gray - Merci pour votre solution. Très utile!
Dans le cas où quelqu'un est intéressé, voici ma position sur sa fonction en utilisant des valeurs d'énumération au lieu de chaînes. Ce changement est purement une question de préférence personnelle. Le code inclut les modifications pour la version 4.5 et semble fonctionner correctement en fonction de mes tests limités.
David
[Code]
//
// Enumeration used to specify a .NET framework version
//
type TDotNetFramework = (
DotNet_v11_4322, // .NET Framework 1.1
DotNet_v20_50727, // .NET Framework 2.0
DotNet_v30, // .NET Framework 3.0
DotNet_v35, // .NET Framework 3.5
DotNet_v4_Client, // .NET Framework 4.0 Client Profile
DotNet_v4_Full, // .NET Framework 4.0 Full Installation
DotNet_v45); // .NET Framework 4.5
//
// Checks whether the specified .NET Framework version and service pack
// is installed (See: http://www.kynosarges.de/DotNetVersion.html)
//
// Parameters:
// Version - Required .NET Framework version
// ServicePack - Required service pack level (0: None, 1: SP1, 2: SP2 etc.)
//
function IsDotNetInstalled(Version: TDotNetFramework; ServicePack: cardinal): boolean;
var
KeyName : string;
Check45 : boolean;
Success : boolean;
InstallFlag : cardinal;
ReleaseVer : cardinal;
ServiceCount : cardinal;
begin
// Registry path for the requested .NET Version
KeyName := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\';
case Version of
DotNet_v11_4322: KeyName := KeyName + 'v1.1.4322';
DotNet_v20_50727: KeyName := KeyName + 'v2.0.50727';
DotNet_v30: KeyName := KeyName + 'v3.0';
DotNet_v35: KeyName := KeyName + 'v3.5';
DotNet_v4_Client: KeyName := KeyName + 'v4\Client';
DotNet_v4_Full: KeyName := KeyName + 'v4\Full';
DotNet_v45: KeyName := KeyName + 'v4\Full';
end;
// .NET 3.0 uses "InstallSuccess" key in subkey Setup
if (Version = DotNet_v30) then
Success := RegQueryDWordValue(HKLM, KeyName + '\Setup', 'InstallSuccess', InstallFlag) else
Success := RegQueryDWordValue(HKLM, KeyName, 'Install', InstallFlag);
// .NET 4.0/4.5 uses "Servicing" key instead of "SP"
if (Version = DotNet_v4_Client) or
(Version = DotNet_v4_Full) or
(Version = DotNet_v45) then
Success := Success and RegQueryDWordValue(HKLM, KeyName, 'Servicing', ServiceCount) else
Success := Success and RegQueryDWordValue(HKLM, KeyName, 'SP', ServiceCount);
// .NET 4.5 is distinguished from .NET 4.0 by the Release key
if (Version = DotNet_v45) then
begin
Success := Success and RegQueryDWordValue(HKLM, KeyName, 'Release', ReleaseVer);
Success := Success and (ReleaseVer >= 378389);
end;
Result := Success and (InstallFlag = 1) and (ServiceCount >= ServicePack);
end;
cela semble très bien, mais pourriez-vous également montrer comment utiliser ce paramètre de vérification? – vidriduch
Ajoutez juste ce droit après la fonction ci-dessus: 'function IsDotNetReallyInstalled(): Boolean; début résultat: = IsDotNetInstalled (DotNet_v45, 0); end; ' Appelez ensuite cela dans votre fonction 'vérification'. –
Excusez-moi ... Vérifiez le paramètre: Ajouter un 'non' ... pas IsDotNetInstallé –
Si vous ne vous inquiétez pas si le "Full" ou tout simplement la version "client" de .NET 4 est installé:
try
ExpandConstant('{dotnet40}');
// Installed
except
// Not installed
end;
- 1. Vérifiez que Solidworks est installé?
- 2. Est-ce que .NET 4.0 est fourni avec Microsoft.Jet.OLEDB.4.0?
- 3. Vérifiez .NET 4 Full Framework est installé
- 4. Inno setup et DefaultDirName
- 5. Inno Setup Folders
- 6. Utilisez Inno Setup pour supprimer une autre application non installée avec Inno Setup pendant l'installation
- 7. Inno setup: cacher les fichiers
- 8. Ajout d'assemblages au GAC depuis Inno Setup
- 9. Inno Setup: Comment voir la sortie (traduction) du préprocesseur Inno Setup?
- 10. Pointeurs de fonction dans Inno Setup
- 11. Inno Setup installer l'application VB6 dll
- 12. Codes de retour msi dans Inno Setup
- 13. Inno Setup installer pour un autre utilisateur
- 14. Changement WizardSmallBitmapImage dans Inno Setup désinstallateur
- 15. Inno Setup: Désinstaller le serveur Dll
- 16. inno setup script d'installation et windows 7
- 17. Vérifiez si le paquet Python est installé
- 18. Vérifiez si MS Access 2010 est installé
- 19. Vérifiez si Yahoo Messenger est installé
- 20. Quitter Inno Setup Installation à partir de [code]
- 21. Est-il possible d'accepter les paramètres de ligne de commande personnalisés avec Inno Setup?
- 22. Quelqu'un connaît un script d'installation .NET Framework 2.0 solide pour Inno Setup?
- 23. Projet d'installation VS 2010 Nécessite .NET 4.0, mais il est déjà installé
- 24. Comment exécuter un fichier avant l'installation avec Inno Setup
- 25. Exécution d'un autre programme d'installation dans une installation Inno Setup
- 26. Modification du schéma de couleurs d'un programme d'installation Inno Setup
- 27. Inno Setup: Désactivation de composants basés sur l'architecture PC
- 28. Lancer un code personnalisé via des tâches dans Inno Setup
- 29. Inno Setup: Ajouter un champ de saisie personnalisé
- 30. Inno Setup/ISTool: Détection de l'adresse IP de l'ordinateur local
Bon. Mais j'ai besoin d'installer framework 4.0 depuis local (à partir de mon application d'installation) – Mediator
Vous devriez être capable de modifier facilement le script ci-dessus pour le faire. Vous devrez télécharger le programme d'installation de .NET Framework 4.0 (Profil client ou Complet, selon votre application) et l'inclure dans le support d'installation de votre application. Ensuite, à partir du script, au lieu d'aller sur Internet pour récupérer le programme d'installation, ouvrez le fichier d'installation existant à partir du répertoire source de votre installation. Ou simplement afficher un message qui demande à l'utilisateur de le faire ("Veuillez d'abord exécuter l'application" NetFWSetup.exe "). –
"Veuillez d'abord exécuter l'application" NetFWSetup.exe "" - et l'installation de programme n'est pas comme ne pas faire? – Mediator