Çalıştırmak için .NET 4.0 gerektiren bir bileşenim var, nasıl kurulduğunu doğrulamak için Inno Kurulumu yükleyicim nasıl doğrulayabilir ve kullanıcı yüklememesini istiyebilir?Inno Kurulumu: .NET 4.0'ın kurulu olduğunu doğrulayın
cevap
Inno Setup çalıştırıcısı çalıştırıldığında InitializeSetup
işlevi çağrılır. Özel bir komut dosyası için bu kodu ekleme istediğini yapmalıdır:
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;
(Kod buradan alınan: http://www.kynosarges.de/DotNetVersion.html)
Birincisi, sürümünü gösterir bir kayıt defteri girdisi olup olmadığını denetler. Yüklenen NET framework. Kayıt defteri girdisi yoksa, kullanıcının .NET çerçevesini indirmesini ister. Kullanıcı Evet diyorsa, indirme URL'sini açar. (Sürüm 4.0 için Senaryoda belirten sürümünü değiştirmek gerekebilir.) Ben de aradığınızı yapmanın daha kapsamlı ve özelleştirilebilir bir yol olabilir this article on CodeProject, rastladı
, bunun her ne kadar anlamak için daha fazla iş gerektirebilir ve sürüm 4.0 ile çalışmak için değiştirilmek zorunda kalacaktır.
@Cody Grey - Çözümünüz için teşekkürler. Çok yararlı!
Herhangi biri ilgilenirse, dizeler yerine numaralandırma numaralarını kullanarak onun işlevini almam işte burada. Bu değişiklik tamamen kişisel tercih meselesidir. Kod, v4.5 için değişiklikleri içeriyor ve sınırlı sınamalarıma dayanarak düzgün çalışıyor gibi görünüyor. 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;
Bu harika görünüyor, ama aynı zamanda kontrol parametresinden nasıl kullanılacağını gösterir misiniz? – vidriduch
Sadece yukarıdaki işlevden hemen sonra şunu ekleyin: 'function IsDotNetReallyInstalled(): Boolean; başlangıç sonuç: = IsDotNetInstalled (DotNet_v45, 0); sonu; ' Sonra 'check' fonksiyonunuzda bunu çağırınız. –
Özür dilerim ... Kontrol parametresi: Ekle 'değil' ... değil IsDotNetInstalled –
"Tam" veya .NET 4'ün sadece "Müşteri" versiyonu yüklüyse umursamıyorsan
:
try
ExpandConstant('{dotnet40}');
// Installed
except
// Not installed
end;
- 1. Inno Kurulumu
- 2. Inno Kurulumu
- 3. Inno Kurulumu özel sayfası
- 4. Inno Kurulumu: JSON ile Çalışmak
- 5. Inno Kurulumu Özel durum yakalanmadı
- 6. Inno Kurulumu: Bir Özel Giriş Alanı Ekleme
- 7. Inno Kurulumu: XML belgesini girintili kaydetme
- 8. Inno Kurulumu: Yüklemeden sonra yeniden başlatılmasını isteyin
- 9. Inno Kurulumu - 32-bit kipte çalışmaya zorla
- 10. Inno Kurulumu: Windows varsayılan uygulama listesini genişletme
- 11. Yaşın 18 yaşından büyük olduğunu doğrulayın
- 12. Bir OCaml işlevinin kuyruk özyinelemeli olduğunu doğrulayın
- 13. Inno Kurulumu: Inno İndirme Eklentisi'ni kullanarak bir ilerleme çubuğunu nasıl güncellerim?
- 14. Inno Kurulumu: regsvr32'yi belirli bir çalışma diziniyle çalıştırın
- 15. CAPICOM - SignedCode, UI olmadan bir Güvenilir Publisher'dan olduğunu doğrulayın
- 16. Inno Kurulumu - Dosyanın hedefte mevcut olup olmadığını kontrol edin veya kurulumu iptal etmiyorsa
- 17. nasıl sessizce MySQL kurulumu için
- 18. PHP Bir dizenin matematiksel bir ifade olduğunu doğrulayın
- 19. Birim Sınaması: Bir dosya/yolun var olduğunu doğrulayın
- 20. Bu python kod snippet'inin yorumunun doğru olduğunu doğrulayın.
- 21. Bir tarihin iki tarih arasında olduğunu doğrulayın (javascript)
- 22. Bir TableViewer'ı doğrulayın ve doğrulayın?
- 23. ASP.NET Ajax Uzantısının yüklemesini doğrulayın
- 24. Inno Setup
- 25. Ruby, kurulu mücevherleri bulamıyor
- 26. Inno Kurulumu: Kaldırma sırasında bir kayıt defteri anahtarı değeri ayarlamanın herhangi bir yolu var mı?
- 27. Inno Kurulumu'ndan GAC'ye derlemeler ekleme
- 28. Inno-Setup ile kurulum için bir ön koşul olarak .NET Framework
- 29. Visual Studio 2010 kurulumu
- 30. Inno Kurulumu - Kurulum Başlatılmadan önce bir dosya nasıl kopyalanır? senin yardımına ihtiyacım
iyi. Ama ben framework 4.0 yüklemeniz gerekir (benim install uygulamasından) – Mediator
Yukarıdaki komut dosyasını sadece bunu yapmak için kolayca değiştirebilmeniz gerekir. .NET Framework 4.0 yükleyicisini (İstemci Profili veya Tam, hangisini uygulamanız gerekiyorsa) indirmeniz ve bunu uygulamanızın yükleme medyasına eklemeniz gerekir. Ardından, komut dosyasından, yükleyiciyi almak için Internet'e çıkmak yerine, kurulum kaynak dizininizden mevcut kurulum dosyasını açın. Veya sadece kullanıcının bunu yapmasını isteyen bir mesaj görüntüler ("Lütfen önce" NetFWSetup.exe "uygulamasını çalıştırın"). –
"Lütfen önce" NetFWSetup.exe "uygulamasını çalıştırın" - ve programlamayı yükleme yapmak değil mi? – Mediator