使用技巧调试信息跳转

在安装过程中显示DetailPrint调试信息

Name "nsExec Test"
 OutFile "nsExec Test.exe"
 ShowInstDetails show
 Section "Output to variable"
 nsExec::ExecToStack '"${NSISDIR}makensis.exe" /VERSION'
 Pop $0 # return value/error/timeout
 Pop $1 # printed text, up to ${NSIS_MAX_STRLEN}
 DetailPrint '"${NSISDIR}makensis.exe" /VERSION printed: $1'
 DetailPrint ""
 DetailPrint " Return value: $0"
 DetailPrint ""
 SectionEnd

NSIS中 +2,+3等跳转到底是跳转几行?

Name "test"
 OutFile "Test.exe"
 ShowInstDetails show
 Section "test"
 DetailPrint "Function readConfig"
 IfFileExists D:SAtesttestdirectory*.* 0 +1
 DetailPrint "IfFileExists +1"
 DetailPrint "IfFileExists +2"
 DetailPrint "IfFileExists +3"
 DetailPrint "IfFileExists +4"
 SectionEnd
(1)IfFileExists D:SAtesttestdirectory*.* 0 +1

(1)IfFileExists D:SAtesttestdirectory*.* 0 +1
执行结果为:

IfFileExists +1
IfFileExists +2
IfFileExists +3
IfFileExists +4

(2)IfFileExists D:SAtesttestdirectory*.* 0 +2
执行结果为:

IfFileExists +2
IfFileExists +3
IfFileExists +4

(3)如果将脚本改为:

Name "test"
 OutFile "Test.exe"
 ShowInstDetails show
 Section "test"
 DetailPrint "Function readConfig"
 IfFileExists D:SAtesttestdirectory*.* 0 +3
 DetailPrint "IfFileExists +1"
 DetailPrint "IfFileExists +2"
 DetailPrint "IfFileExists +3"
 DetailPrint "IfFileExists +4"
 SectionEnd

预期的执行结果为:

IfFileExists +2
IfFileExists +3
IfFileExists +4

但实际的执行结果却为:

IfFileExists +3
IfFileExists +4

可见,空行在编译后会被滤掉,并不会影响+3所影响的行数。
NSIS中禁止Silverlight自动更新
Silverlight 安装后默认是自动更新的。百度百科中 更改更新设置 一节(http://baike.baidu.com/view/904726.htm)
右键单击Microsoft Silverlight当前显示的内容,然后选择“Silverlight配置”。
选择“更新”选项卡。
选择以下某个选项:
(0)自动安装更新(推荐) – 如果选中此选项,您的计算机将自动安装最新的修补程序、全新的功能以及升级程序,从而保持计算机处于最新状态。这是 Microsoft Silverlight 的默认设置。
(1)检查更新,但是让我选择是否下载和安装更新 – 如果选中此选项,则可以下载更新并将其安装到您的计算机上时,系统将向您发出通知。
(2)从不检查更新(不推荐) – 您将不会收到有关任何修补程序(包括安全修补程序)、功能或升级程序的通知。
在企业环境中,管理员可以配置组策略来防止 Microsoft Silverlight 自动更新。可以创建一个注册表项 HKLMSoftwareMicrosoftSilverlight,其值名称为 UpdateMode,值类型为 DWORD,给定的值为 0x00000002。
此设置将指示计算机不检查自动更新。
Silverlight在安装后,注册表中已存在更新设置的注册表项:UpdateConsentMode.其默认值为:0,自动安装更新。我们可以将它改为2.

# The Silverlight's AutoUpdate is on by default(0x0). Change it to disable mode(0x2)
 ${If} ${RunningX64}
 WriteRegDWORD HKLM "SOFTWAREWow6432NodeMicrosoftSilverlight" "UpdateConsentMode" 0x2
 ${Else}
 WriteRegDWORD HKLM "SOFTWAREMicrosoftSilverlight" "UpdateConsentMode" 0x2
 ${EndIf}

NSIS中如何记录Log?
(1)可以通过插件:
比如NSISLog plug-in,LogEx plug-in等。一般LogEx比较常用。
(2)NSIS内置支持Log功能
NSIS内置是支持Log功能的,但是官方下载的NSIS安装文件(比如 nsis-2.46-setup.exe)中并不包含Log功能(目的是为了减小NSIS文件大小)。
你可以下载NSIS的源码,重新编译NSIS生成exe,编译时要对编译命令行做一些设置:

scons NSIS_CONFIG_LOG=yes PREFIX=C:somewhere install-compiler install-stubs

另外,如果嫌自己编译太麻烦,可以下载已编译好的patch,替换NSIS安装目录下的相应文件(参考http://nsis.sourceforge.net/Special_Builds,下载“Download advanced logging build”下的patch)。
解压后覆盖NSIS安装目录“C:Program Files (x86)NSIS”下的相应文件(参考http://stackoverflow.com/questions/861297/saving-nsis-install-log)。
NSIS 检测Desktop-Experiemce状态并安装
WinServer 2008的Desktop Experience不是默认安装的。可以使用PowerShell的cmdlet命令检测他的安装状态,若没有安装,则安装之。
1. 可以使用get-command命令加上 通配符参数 来获取Feature具体名字。
2. 使用Get-WondowsFeature 可获取Feature的安装状态,如果不带参数则可获取所有Feature的安装状态。若该Feature已安装,则其前面会带有一个[X]标志。
3.在NSIS中,可以使用nsExec来执行PowerShell程序来完成检测和安装。
具体使用方法,可参考: http://stackoverflow.com/questions/13391340/how-to-call-powershell-in-nsis
安装过程中检测数据库是否已经存在
制作服务端程序的安装包,常常要创建数据库和其中的表。在创建之前,应该检测一下这个数据库是否已经存在了,如果已经存在,那么弹出消息框问用户是不是要覆盖现有的数据库数据。这里是一个使用NSIS制作安装包时的检测方法。
检测部分的NSIS代码如下:

nsExec::Exec 'sqlcmd -S .SQLEXPRESS -d SampleDB'
 Pop $0
 IntCmp $0 1 Update Ask

原理很简单,用sqlcmd登录到想要创建的数据库,如果已经存在了,那么成功登录,$0里的值将是0,否则就是1。
NSIS里有很多种Exec的方式,而且检测数据库存在也有很多种。今天试了很多种,有些行不通,有些过于复杂,上面这种是相对简单的方法。希望能给需要的人一些提示。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容