Ich habe eine Komponente, die .NET 4.0 ausgeführt werden muss, wie kann mein Inno Setup-Installationsprogramm überprüfen, ob es installiert ist, und wenn nicht, den Benutzer zur Installation auffordern?Inno Setup: Überprüfen Sie, dass .NET 4.0 installiert ist
Antwort
Die Funktion InitializeSetup
wird aufgerufen, wenn die ausführbare Datei Inno Setup ausgeführt wird. Einfügen von Code für eine benutzerdefinierte Skript sollte das tun, was Sie wollen:
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 von hier genommen: http://www.kynosarges.de/DotNetVersion.html)
Erstens ist es für das Vorhandensein eines Registrierungseintrag überprüft, die die Version des angibt. NET-Framework, das installiert ist. Wenn der Registrierungseintrag nicht vorhanden ist, wird der Benutzer aufgefordert, das .NET-Framework herunterzuladen. Wenn der Benutzer Ja sagt, wird die Download-URL geöffnet. (Sie müssen möglicherweise die Version ändern Sie es 4.0 im Skript-Version angibt.)
ich über this article on CodeProject auch kam, die eine umfassende und anpassbare Weg sein kann, zu tun, was Sie suchen, obwohl es kann mehr Arbeit erfordern, um zu verstehen, und muss geändert werden, um mit Version 4.0 zu arbeiten.
@Cody Grey - Vielen Dank für Ihre Lösung. Sehr hilfreich!
Falls jemand interessiert ist, hier ist meine Ansicht auf seine Funktion mit Aufzählungswerte statt Strings. Diese Änderung ist ausschließlich eine Frage der persönlichen Präferenz. Der Code enthält die Änderungen für Version 4.5 und scheint auf der Grundlage meiner begrenzten Tests ordnungsgemäß zu funktionieren.
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;
das sieht gut aus, aber würden Sie auch zeigen, wie Sie dies von Check-Parameter verwenden? – vidriduch
Fügen Sie das einfach nach der obigen Funktion hinzu: 'function IsDotNetReallyInstalled(): Boolean; beginnen Ergebnis: = IsDotNetInstalled (DotNet_v45, 0); ende; ' Dann rufen Sie das in Ihrer 'check' Funktion. –
Entschuldigung ... Überprüfen Sie Parameter: Fügen Sie ein 'nicht' ... nicht IsDotNetInstalled –
Wenn Sie nicht egal, wenn die "Full" oder einfach nur die "Client" Version von .NET 4 installiert ist:
try
ExpandConstant('{dotnet40}');
// Installed
except
// Not installed
end;
- 1. INNO-Setup-Treiber bereits installiert
- 2. .NET Framework als Voraussetzung für die Installation mit Inno-Setup
- 3. Inno-Setup Überprüfen auf laufenden Prozess
- 4. Inno-Setup ... Verwenden Sie alte DB, wenn vorherige Version installiert
- 5. Inno Setup-Registrierung
- 6. Wird .NET 4.0 mit Microsoft.Jet.OLEDB.4.0 geliefert?
- 7. Inno Setup benutzerdefinierte Seite
- 8. Inno-Setup: Überprüfen Sie, ob die Datei irgendwo in C vorhanden ist: Laufwerk
- 9. Inno Setup Standardinstallationsordner ändern
- 10. Inno-Setup: Benutzerdefinierte Klassen
- 11. Inno Setup: OnHover-Ereignis
- 12. Inno Setup Definieren Sie die Position {tmp}
- 13. Inno-Setup Semicolon fehlt
- 14. Inno Setup - UrlCreateFromPath
- 15. Setup ausführen, wenn .Net Framework nicht installiert ist
- 16. Inno-Setup - Überprüfen des Vorhandenseins der Datei in {pf}
- 17. Überprüfen Sie, ob das aktuelle Betriebssystem Windows 8.1 ist mit Inno Setup Pascal Script
- 18. Inno Setup - Java-Umgebungsvariable einstellen
- 19. Länderbasierter Download in Inno Setup
- 20. Binärdatei in Inno-Setup schreiben
- 21. So fügen Sie eine geplante Aufgabe mit Inno-Setup hinzu
- 22. VBScript, um zu überprüfen, ob .net 2.0 installiert ist
- 23. Inno Setup Ungültiges Bitmap-Bild
- 24. Inno-Setup: Deinstallation ohne Administratorberechtigung
- 25. msi Rückkehrcodes in Inno-Setup
- 26. Inno Setup mit drei Zielordnern
- 27. Inno-Setup kann nicht gestartet werden exe
- 28. Inno Setup deinstallieren Fortschrittsbalken Änderungsereignis
- 29. Überprüfen Sie, ob Yahoo Messenger installiert ist
- 30. Inno Setup als Bootstrapper für .msi
Gut. Aber ich brauche Framework 4.0 von lokal installieren (von meiner Installationsanwendung) – Mediator
Sie sollten in der Lage sein, das obige Skript einfach zu ändern, um genau das zu tun. Sie müssen das .NET Framework 4.0-Installationsprogramm (entweder Clientprofil oder Vollständig, je nachdem, was für Ihre App erforderlich ist) herunterladen und es in das Installationsmedium Ihrer Anwendung einbinden. Öffnen Sie dann anstelle des Internets zum Abrufen des Installationsprogramms im Skript die vorhandene Setup-Datei aus dem Installationsquellverzeichnis. Oder zeigen Sie einfach eine Meldung an, die den Benutzer dazu auffordert ("Bitte führen Sie zuerst die Anwendung" NetFWSetup.exe "aus"). –
"Bitte führen Sie zuerst die Anwendung" NetFWSetup.exe "aus - und die Programminstallaxe ist nicht gerne nicht? – Mediator