NSIS 安装包制作常用代码

在制作安装包的过程中,有些常用的步骤需要考虑。比如安装程序需要检查程序是否正在运行,vs2010运行时库是否已经安装等


1、检查vs2010运行时库是否已经安装

  

Function InstallX86

  Push $R0

  ClearErrors

  ReadRegDword $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{196BB40D-1578-3D01-B289-BEFC77A11A1E}" "Version"

  IfErrors 0 VSRedistInstalled

  ClearErrors

  ReadRegDword $R0 HKLM "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}" "Version"

  IfErrors 0 VSRedistInstalled

  ExecWait '"$INSTDIR\vcredist_x86.exe" /q' # silent install

  VSRedistInstalled:

  Exch $R0

FunctionEnd


Function CheckVCRedist

  Call InstallX86

FunctionEnd

CheckVCRedist”函数可以在合适的Section中调用。

   调用条件:1、vcredist_x86.exe在安装目录下。

                    2、注意“{196BB40D-1578-3D01-B289-BEFC77A11A1E}”和“{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}”,这是vs2010运行时库的id

                          其他版本的id需要查找。


2、在安装过程中需要判断文件是否已经存在。按照是否存在,做不同的处理。

      

IfFileExists "$DOCUMENTS\atwork\xxxx.ini" 0 +2

    Goto ini_has

    CreateDirectory "$DOCUMENTS\atwork"

    SetOutPath "$DOCUMENTS\atwork\"

    File ".\release\xxxx.ini"

    

    ini_has:

    IfFileExists "$DOCUMENTS\atwork\xxxx.db" 0 +2

    Goto db_has

    CreateDirectory "$DOCUMENTS\atwork"

    SetOutPath "$DOCUMENTS\atwork\"

    File ".\release\xxxx.db"

  

  db_has:

   ............



3、判断被安装的程序是否正在运行中

Function .onInit

   FindProcDLL::FindProc "xxxx.exe"

   IntCmp $R0 1 0 no_run

   MessageBox MB_ICONSTOP "安装程序检测到 xxxx.exe 正在运行,请退出程序后重试"

   Quit

   no_run:

FunctionEnd


注意:1、网上很多示例代码在"FindProcDLL::FindProc "xxxx.exe""的下一行,都有 “Pop $Ro”这句代码。

              在测试中如果存在这句代码,是不能真确检查进程是否存在的。

          2、需要在下载“FindProcDLL.dll”插件。将插件放入NSIS安装目录下的“Plugins\x86-ansi”路径下。



以上代码,基本都来源网络,谢谢原创。如有侵权,请告之。

转载于:https://my.oschina.net/u/208978/blog/345753

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值