
正文
Inno Setup 检测已安装的.NET Framework 版本
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
翻译自:http://kynosarges.org/DotNetVersion.html
由 Jordan Russell 写的 Inno Setup 是一个伟大的安装脚本程序,但缺乏一个内置的函数来确定安装在目标机器上的.NET Framework版本。幸运的是,它很容易使用 Pascal 脚本语言来实现这样的功能。
脚本
在下面的 Inno Setup的 脚本代码块,函数 IsDotNetDetected 检查指定的.NET Framework 版本和至少指定的服务包级别是否被安装了。所有列出的版本字符串是最终的发行版本; 测试版和发布候选通常具有不同的版本号。函数 InitializeSetup 演示了如何使用 IsDotNetDetected 检查 .NET Framework 4.6 是否有服务包。
我把在公共域代码这个小一点,这样你可以将它嵌入到自己的项目,修改和重新发布它,你认为合适。
[Code]
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
//
// 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 := ; // .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) = then begin
versionKey := 'v4\Full';
case version of
'v4.5': versionRelease := ;
'v4.5.1': versionRelease := ; // 378758 on Windows 8 and older
'v4.5.2': versionRelease := ;
'v4.6': versionRelease := ; // 393297 on Windows 8.1 and older
'v4.6.1': versionRelease := ; // 394271 on Windows 8.1 and older
'v4.6.2': versionRelease := ; // 394806 on Windows 8.1 and older
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) = 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) = 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 > then begin
success := success and RegQueryDWordValue(HKLM, key, 'Release', release);
success := success and (release >= versionRelease);
end; result := success and (install = ) and (serviceCount >= service);
end; function InitializeSetup(): Boolean;
begin
if not IsDotNetDetected('v4.6', ) then begin
MsgBox('MyApp requires Microsoft .NET Framework 4.6.'##
'Please use Windows Update to install this version,'#
'and then re-run the MyApp setup program.', mbInformation, MB_OK);
result := false;
end else
result := true;
end;







