目前开发的程序以基于.net的应用程序为主,程序开发好后,需要进行安装包的生成,及setup文件的生成。
常见的是NSIS工具,之前一直用的单文件打包工具,不适合将运行环境加进去,因此开始使用更高版本的NSIS 3.06。

关于判断.NET Framework运行环境 (离线安装)

  1. 首先添加头文件: 用来版本比较
!include "WordFunc.nsh"
  1. 添加 GetNetFrameworkVersion 函数,这里给出完整函数代码:
Function GetNetFrameworkVersion
	Push $1
	Push $0
	ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Install"
	ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Version"
	StrCmp $0 1 KnowNetFrameworkVersion +1
	ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" "Install"
	ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" "Version"
	StrCmp $0 1 KnowNetFrameworkVersion +1
	ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" "Install"
	ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" "Version"
	StrCmp $0 1 KnowNetFrameworkVersion +1
	ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "InstallSuccess"
	ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "Version"
	StrCmp $0 1 KnowNetFrameworkVersion +1
	ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Install"
	ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Version"
	StrCmp $1 "" +1 +2
	StrCpy $1 "2.0.50727.832"
	StrCmp $0 1 KnowNetFrameworkVersion +1
	ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Install"
	ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Version"
	StrCmp $1 "" +1 +2
	StrCpy $1 "1.1.4322.573"
	StrCmp $0 1 KnowNetFrameworkVersion +1
	ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0" "Install"
	ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0" "Version"
	StrCmp $1 "" +1 +2
	StrCpy $1 "1.0.3705.0"
	StrCmp $0 1 KnowNetFrameworkVersion +1
	StrCpy $1 "not .NetFramework"
	KnowNetFrameworkVersion:
	Pop $0
	Exch $1
FunctionEnd
  1. 最后,在Section区段进行比较版本号并静默安装.NET:
Section -.NET
	Call GetNetFrameworkVersion
	Pop $R1
	${VersionCompare} "4.0.30319" "$R1" $R2
	${If} $R2 == 1
 		SetDetailsPrint textonly
 		DetailPrint "正在安装 .NET Framework 4"
 		SetDetailsPrint listonly
 		SetOutPath "$TEMP"
 		SetOverwrite on
 		File "dotNetFx40_Full_x86_x64.exe"
 		ExecWait '"$TEMP\dotNetFx40_Full_x86_x64.exe" /q /norestart /ChainingPackage FullX64Bootstrapper'
 		Delete "$TEMP\dotNetFx40_Full_x86_x64.exe"
	${EndIf}
SectionEnd

这里的dotNetFx40_Full_x86_x64.exe放在脚本路径下就可以,编译会自动打包到一个文件里面去。

最后附上一个比较版本号的section:

Section - "比较版本号"
	Call GetNetFrameworkVersion
	Pop $R1
	${VersionCompare} "4.0.30319" "$R1" $R2
	${If} $R2 == 0
		MessageBox MB_OK "版本相同($R1)"
	${ElseIf} $R2 == 1
		MessageBox MB_OK "已安装版本低($R1)"
	${ElseIf} $R2 == 2
		MessageBox MB_OK "已安装版本高($R1)"
	${EndIf}
SectionEnd
                    前言目前开发的程序以基于.net的应用程序为主,程序开发好后,需要进行安装包的生成,及setup文件的生成。常见的是NSIS工具,之前一直用的单文件打包工具,不适合将运行环境加进去,因此开始使用更高版本的NSIS 3.06。关于判断.NET Framework运行环境 (离线安装)首先添加头文件:  用来版本比较!include "WordFunc.nsh"添加 GetNetFrameworkVersion 函数,这里给出完整函数代码:Function GetNetFramework
				
NSIS 是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System) 的缩写,它是一个免费的 Win32 安装、卸载系统,采用了简洁高效的脚本方式。它本来是一个由 Nullsoft 创建并用于作为 Winamp 及其插件发布的系统,但现已被上百个应用程序所应用,作为它们进行程序发布的工具。 NSIS 创建的安装程序可以进行安装、卸载、设置系统设置、解压文件等等。几乎可以做所有事情。因为它基于脚本文件,所以你可以完全控制你的安装程序的每个部分。它的脚本语言支持变量、函数、字串处理,就像是一个普通的程序语言——但其仅设计用来创建安装程序。 此增强版除了主程序的翻译之外还把主要的文档作了翻译并修正了官方版本里简体中文语言习惯用语不合适之处。单纯的使用脚本来编写安装程序对于大多数人来说不仅困难而且容易出错,为此,增强版里集成了一个相当好用的脚本编辑器 - VNISEdit。只需要根据向导就能轻松的做出很酷的安装程序,甚至,你还可以在向导里给你的安装程序添加启动画面、让你的安装程序在安装过程中播放音乐,而这,只需要点几下鼠标即可。除此之外,VNISEdit 附带的注册表转换插件还可以把 .reg 文件一次性的转换为 NSIS 脚本,补丁制作向导可以一次性地为你生成体积超小的补丁升级程序。此增强版还在官方版本的基础上集成了一些有用的插件,比如 FindProc 可以根据可执行文件名查找进程是否在运行,这在制作补丁程序或者是汉化包时非常有用。由于各个组件在使用时各自独立,所以强烈推荐安装全部组件。
这段时间在学习nsis打包,遇到了一个问题,nsis脚本设置.net运行环境问题,在网上看了不少教程,但都不完整,这里给出一个我觉得判断.net版本的连接:http://blog.csdn.net/aqtata/article/details/51814602这里是分版本判断电脑的.net是否安装,有了判断.net是否安装的方法,剩下的就是调用,网上给出了很多调用此方法的例子,如: Section
NSIS判断Microsoft .NET Framework版本并进行安装,网上的教程大多数都是以下的示例。然后在我实际使用中却发现有问题。 首先,我们在Function区段进行当前.NET版本判断: Function GetNetFrameworkVersion ;获取.Net Framework版本支持 Push $1 Push $0 ReadRegDW...
如果我们的软件开发的语言使用的是C#,使用的平台框架是Net.Framework,哪么在部署软件安装时,就需要考虑在安装过程检测是否需要安装net环境,并进行安装。 本文以ScreenToGif 这款软件为例,详细讲解如何在安装的过程中检测并下载net包进行安装。 1、ScreenToGif 是一款开源的截屏软件,依赖于Net.Framework环境 2、本文讲解的NSIS安装过程为自定义界面,而非传统界面(需要传统界面的留言区留言)。 3、Win10系统好像是自动集成了Net.Fr..
在日常开发中,我们市场会调用一些其它的第三方东西,甚至是为了当前软件,我们会安装一些环境,比如C++环境,或者是.net 环境等等。 例如:我现在有一个wpf开发的软件,它携带了许多第三方的环境跟其它软件。 我利用nsis 将它合并成一个安装包,现在我来开始运行它。 初始化打开页面。 当我点击下一步的时候与其它软件安装无异 第三步install 安装它 这时候如果它附带了许多其它软件或者环境,这时候就会有若干个安装框弹出,需要你手动点击下一步。 如果用户是个新手,那这无疑给用户带来了麻烦,..
NSIS (Nullsoft Scriptable Install System) 是一种用于创建 Windows 安装程序的脚本语言。它具有一组内置命令和参数,可用于定义安装程序的行为和外观。 PageCallbacks 是 NSIS 中的一种功能,可用于在安装程序向用户显示页面时执行自定义操作。例如,您可以使用 PageCallbacks 来更改页面的文本或标题,或者在用户点击按钮时执行特定的操作。 使用 PageCallbacks 时,您需要在安装脚本中使用特定的命令来定义回调函数,然后使用另一个命令将回调函数与页面关联。例如,要在页面显示时更改文本,您可以使用 `PageEx` 命令,并使用 `/onInit` 选项指定回调函数: Function MyPageInit ${If} ${RunningX64} StrCpy $0 "This is the x64 version." ${Else} StrCpy $0 "This is the x86 version." ${EndIf} SetWindowText $0 FunctionEnd PageEx MyPage /onInit MyPageInit 您还可以使用其他 PageCallbacks 命令,如 `/onShow` 和 `/onLeave`,来执行其他自定义操作。有关更多信息,请参阅 NSIS 官方文档或其他 NSIS 教程。