Tôi có một thành phần yêu cầu .NET 4.0 để chạy, trình cài đặt Inno Setup của tôi có thể xác minh rằng nó đã được cài đặt như thế nào và nếu không, hãy nhắc người dùng cài đặt?Cài đặt Inno: Xác minh rằng .NET 4.0 đã được cài đặt
Trả lời
Chức năng InitializeSetup
được gọi khi chạy cài đặt Inno Setup. Chèn mã này cho một kịch bản tùy chỉnh nên làm những gì bạn muốn:
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;
(Mã lấy từ đây: http://www.kynosarges.de/DotNetVersion.html)
Đầu tiên, nó kiểm tra sự hiện diện của một mục đăng ký cho biết phiên bản của. NET framework được cài đặt. Nếu không có mục đăng ký, nó sẽ nhắc người dùng tải xuống khung công tác .NET. Nếu người dùng nói Có, nó sẽ mở URL tải xuống. (Bạn có thể phải thay đổi phiên bản nó chỉ định trong kịch bản thành phiên bản 4.0.)
Tôi cũng đã xem qua số this article on CodeProject, có thể là một cách toàn diện hơn và có thể tùy chỉnh để thực hiện những gì bạn đang tìm kiếm. có thể mất nhiều công việc để hiểu và sẽ phải được sửa đổi để làm việc với phiên bản 4.0.
@Cody Grey - Cảm ơn bạn đã giải pháp. Rất hữu ích!
Trong trường hợp bất kỳ ai quan tâm, đây là việc tôi thực hiện chức năng của mình bằng cách sử dụng các giá trị đếm thay vì chuỗi. Sự thay đổi này hoàn toàn là vấn đề sở thích cá nhân. Mã này bao gồm các thay đổi cho v4.5 và có vẻ hoạt động đúng dựa trên thử nghiệm giới hạn của tôi.
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;
điều này có vẻ tuyệt vời, nhưng bạn cũng sẽ hiển thị cách sử dụng thông số này từ thông số kiểm tra? – vidriduch
Chỉ cần thêm quyền này sau hàm trên: 'hàm IsDotNetReallyInstalled(): Boolean; bắt đầu kết quả : = IsDotNetInstalled (DotNet_v45, 0); kết thúc; ' Sau đó, gọi đó trong chức năng 'kiểm tra' của bạn. –
Xin lỗi ... Kiểm tra tham số: Thêm 'không' ... không phải IsDotNetInstalled –
Nếu bạn không quan tâm nếu "Full" hay chỉ là phiên bản "Khách hàng" của .NET 4 được cài đặt:
try
ExpandConstant('{dotnet40}');
// Installed
except
// Not installed
end;
- 1. Có an toàn để cài đặt .Net 3.5 SP1 sau khi .Net 4.0 RC đã được cài đặt chưa?
- 2. Trình cài đặt NSIS có .NET 4.0
- 3. Chạy trình cài đặt khác trong cài đặt Inno Setup
- 4. Có lệnh dòng lệnh để xác minh phiên bản .NET nào đã được cài đặt không.
- 5. Thoát khỏi Cài đặt Cài đặt Inno từ [code]
- 6. Tôi xác minh rằng người dùng đã cài đặt ứng dụng iPhone như thế nào?
- 7. Cài đặt Inno: Cài đặt tệp từ Internet
- 8. Cài đặt Inno: Cách xác định mảng trong const?
- 9. Cài đặt Inno Setup có thể chạy được (cài đặt trình điều khiển) trong khi cài đặt
- 10. Xác minh cài đặt của ASP.NET Ajax Extension
- 11. Cài đặt Inno: TBitmapImage không hiển thị
- 12. Cài đặt Inno: Cách đặt trình cài đặt "Chạy với tư cách quản trị viên"?
- 13. Cài đặt .NET Framework 4.0, thay đổi ổ đĩa
- 14. Cách nâng cấp cài đặt MSI bằng trình cài đặt Inno Setup?
- 15. WiX Burn - Xác định những mục đã được cài đặt
- 16. Cài đặt Inno: Cài đặt các dịch vụ Windows bằng cách sử dụng "sc create"
- 17. Bạn có cần cả hai .net 3.5 và 4.0 được cài đặt hoặc chỉ .net 4?
- 18. Hiển thị liên kết Thỏa thuận Cấp phép trong Cài đặt Inno trong khi cài đặt
- 19. Gói WiX để cài đặt .NET
- 20. Cách cài đặt .NET 4.5?
- 21. .NET Framework là điều kiện tiên quyết để cài đặt với Inno-Setup
- 22. Phân phối VC++ Redist ... chạy trình cài đặt khi đã được cài đặt gây ra sự cố
- 23. Làm cho trình cài đặt có văn bản được định dạng (một phần Bold) trong Cài đặt Inno?
- 24. Tạo trình cài đặt sẽ thực hiện cập nhật nếu phiên bản cũ hơn đã được cài đặt
- 25. Cài đặt Inno: Ẩn/Tắt thành phần khi chạy
- 26. Cài đặt Inno: Thêm trường nhập tùy chỉnh
- 27. Cài đặt .NET 4.5 REALLY có thay thế các phiên bản .NET 4.0 không?
- 28. Cài đặt Inno Hằng số trong Mã Mục
- 29. Cách tạo GUID mới trong Cài đặt Inno?
- 30. Cài đặt Inno Đổi tên tệp trong khi đóng gói
Tốt. Nhưng tôi cần cài đặt khung 4.0 từ địa phương (từ ứng dụng cài đặt của tôi) – Mediator
Bạn sẽ có thể dễ dàng sửa đổi kịch bản trên để làm điều đó. Bạn sẽ phải tải xuống trình cài đặt .NET Framework 4.0 (Hồ sơ khách hàng hoặc Đầy đủ, tùy theo ứng dụng của bạn yêu cầu) và bao gồm điều này với phương tiện cài đặt của ứng dụng của bạn. Sau đó, từ tập lệnh, thay vì đi ra ngoài Internet để tìm nạp trình cài đặt, hãy mở tệp thiết lập hiện có từ thư mục nguồn cài đặt của bạn. Hoặc chỉ cần hiển thị một thông báo yêu cầu người dùng làm như vậy ("Hãy chạy ứng dụng" NetFWSetup.exe "đầu tiên"). –
"Hãy chạy ứng dụng" NetFWSetup.exe "đầu tiên" - và chương trình cài đặt không giống như không làm? – Mediator