当前位置: 首页 > news >正文

Inno 安装前检测.net framework 4.0

[Files] //存在netframework的目录
Source: "D:\LF\Vega\NetFramework\dotNetFx40_Full_x86_x64.exe"; DestDir: "{tmp}"; Flags: ignoreversion

 

[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
// 'v4.7' .NET Framework 4.7
// 'v4.7.1' .NET Framework 4.7.1
//
// 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
'v4.7.1': versionRelease := 461308; // 461310 before Win10 Fall 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;
var err: integer; Path:string;ResultCode: Integer;
begin
if not IsDotNetDetected('v4.0', 0) then begin

if MsgBox('系统检测到您没有安装.Net Framework4.0运行环境,是否立即安装?', mbConfirmation, MB_YESNO) = idYes then
begin
ExtractTemporaryFile('dotNetFx40_Full_x86_x64.exe'); //解压.net Framework到临时文件
Exec(ExpandConstant('{tmp}\dotNetFx40_Full_x86_x64.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode); //安装 .net Framework
result := false;
end;
end else
result := true;
end;

转载于:https://www.cnblogs.com/bigsky/p/8631149.html

相关文章:

  • MySQL5.7 添加用户、删除用户与授权
  • Puppeteer:浏览器控制器
  • Centos 如何双击执行可执行程序
  • 大幕已拉开,人工智能离我们还有多远?
  • SpringBoot2系列教程(二)maven项目包 (特别完整!)
  • 如何用 SpringBoot 优雅的写代码
  • postgres 错误
  • 如何在C#项目中使用NHibernate
  • JAVA多线程机制解析-volatilesynchronized
  • 基于hi-nginx的web开发(python篇)——cookie和会话管理
  • hostPath Volume - 每天5分钟玩转 Docker 容器技术(148)
  • 使用vigil 监控微服务系统包含可视化界面
  • Centos查看端口占用情况和开启端口命令
  • 分布式计算框架MapReduce
  • php新特性:trait 关键字使用
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Bytom交易说明(账户管理模式)
  • C++类中的特殊成员函数
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • java 多线程基础, 我觉得还是有必要看看的
  • laravel with 查询列表限制条数
  • mongodb--安装和初步使用教程
  • MySQL-事务管理(基础)
  • Vue.js 移动端适配之 vw 解决方案
  • vue-cli在webpack的配置文件探究
  • web标准化(下)
  • yii2中session跨域名的问题
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 区块链分支循环
  • 优化 Vue 项目编译文件大小
  • 正则表达式
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​Python 3 新特性:类型注解
  • #define,static,const,三种常量的区别
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #在 README.md 中生成项目目录结构
  • (1)Android开发优化---------UI优化
  • (11)MSP430F5529 定时器B
  • (转)JAVA中的堆栈
  • (转)Scala的“=”符号简介
  • ***检测工具之RKHunter AIDE
  • .bat批处理出现中文乱码的情况
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET gRPC 和RESTful简单对比
  • .NET 命令行参数包含应用程序路径吗?
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .net快速开发框架源码分享
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET面试题(二)
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @Bean有哪些属性
  • [ C++ ] STL_list 使用及其模拟实现
  • [100天算法】-x 的平方根(day 61)
  • [30期] 我的学习方法