问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

NSIS错误是什么

发布网友 发布时间:2022-07-28 16:51

我来回答

3个回答

热心网友 时间:2024-11-24 02:03

  呵呵 这个是的1. NSIS的主要特点:
  —开销小,一个完整功能的安装程序仅需要 34k 的额外开销。
  —支持大多数 Windows 平台,包括:Windows 9.x,Windows NT,Windows 2000,Windows XP,Windows 2003
  —支持三大压缩算法:Zlig,BZips, LZMA
  —支持脚本
  —支持多语言
  —支持安装界面定制
  —提供可扩展的插件接口
  —支持网络安装、补丁
  —支持无人值守的安装模式
  —此外,NSIS的license允许任何用途免费使用。
  2. 开发一个NSIS的安装程序通常有以下几步:
  —确定安装的功能和界面元素
  —编写 NSIS 脚本
  —使用 NSIS 提供的 makensis 或者 makensisw 程序,将步骤 2 编写的脚本编译成可执行的安装程序
  —调试安装程序,如果有问题退到第二步重复
  —随着 NSIS 的流行,有一些第三方的 NSIS 脚本开发环境出现了,如 HMNISEdit,Venis IX。
  前者是完全开源的,后者仅对个人和非商业用途免费。在这些集成开发环境下,步骤2,3可以方便的组合在一起。
  3. NSIS 脚本的结构
  3.1 NSIS 脚本(下称 nsi 脚本)主要包含安装程序属性、页面、区段、函数。
  属性用来定义安装程序的行为和界面风格,这些属性大部分是编译时刻属性,即不能在运行时刻改变。
  页面是指安装程序的向导页面。
  示例:
  Page license
  Page components
  Page directory
  Page instfiles
  UninstPage uninstConfirm
  UninstPage instfiles
  3.2 区段是对应某种安装/卸载选项的处理逻辑,该段代码仅当用户选择相应的选项才被执行。
  卸载程序的区段名用"un."作 为前缀。
  示例:
  Section "Installer Section"
  SectionEnd
  Section "un.Uninstaller Section"
  SectionEnd
  3.3 在区段中可以使用很多指令用来完成诸如解压缩文件、读写注册表、创建目录、创建快捷方式等任务。
  但最常用的指令是 SetOutPath 和 File。前者用于指定目的位置,后者用于指定文件。
  示例:
  Section "My Program"
  SetOutPath $INSTDIR
  File "My Program.exe"
  File "Readme.txt"
  SectionEnd
  3.4 区段名的修饰符“/o”表示该区段默认不选上,“-”表示隐藏区段(匿名区段也是隐藏区段),“!”表示需要粗体显示的区段。
  SectionIn 表示该区段和安装类型之间的关系:
  SectionIn insttype_index [RO]
  RO 修饰符表示不可修改。
  3.5 子区段用于包含多个区段:
  SubSection [/e] Caption [subsection_name index output]
  修饰符“/e”用于该子区段的所有区段是否默认展开。
  3.6 函数包含了模块化的安装逻辑,在 nsi 脚本中函数分为两种:用户自定义函数和回调函数。
  用户自定义函数仅当是 Call 指令调用时才被执行。
  如果函数体中没有abort语句,则安装程序执行完了用户自定义函数,继续运行 Call 语句和指令。
  用户自定义函数的语法如下:
  Function <函数名>
  # some commands
  FunctionEnd
  函数的调用则使用以下语法:
  Call <函数名>
  可见无论是函数的定义还是函数的调用都没有参数传递。
  通常 nsi 的参数传递是通过堆栈操作 Pop,Push 和 20 个寄存器变量 $0~$9、$R0~$R9 进行的。
  也可以通过全局变量完成参数传递。
  如:
  Var input ;
  Var output ;
  Section bla
  DeteailPrint "input is $input$\n"
  Call square
  DeteailPrint "square of $input is $output$\n"
  SectionEnd
  Function square
  output = input^2
  FunctionEnd
  回调函数则是由在特定的时间点触发的程序段。常用的回调函数如 .onInit:
  Function .onInit
  MessageBox MB_YESNO "This will install My Program. Do you wish to continue?" IDYES gogogo
  Abort
  gogogo:
  FunctionEnd
  NSIS 对于安装逻辑定义以下回调函数:
  .onGUIInit
  .onInit
  .onInstFailed
  .onInstSuccess
  . onGUIEnd
  .onMouseOverSection
  .onRebootFailed
  .onSelChange
  .onUserAbort
  .onVerifyInstDir
  NSIS 对于卸载逻辑定义以下回调函数:
  un.onGUIInit
  un.onInit
  un.onUninstFailed
  un.onUninstSuccess
  un.onGUIEnd
  un.onRebootFailed
  un.onUserAbort
  4. nsi 脚本的变量定义
  nsi 脚本的变量定义用 Var 关键字,后跟变量名,变量是全局的并且是大小写敏感的。变量引用时需要加上前缀“$”。
  除了用户自定义的变量外,nsi 脚本中与定义寄存器变量 $0~$9、$R0~$R9 用于参数传递,以及系统变量用于特定用途。
  这些变量主要有:
  $INSTDIR,$OUTDIR,$CMDLINE,$LANGUAGE 这些变量都是可写的。
  $PROGRAMFILES,$COMMONFILES,$DESKTOP,$EXEDIR,$WINDIR,$SYSDIR,$ TEMP,$STARTMENU
  $SMPROGRAMS,$SMSTARTUP,$QUICKLAUNCH,$DOCUMENTS,$SENDTO,$ RECENT,$FAVORITES
  $MUSIC,$PICTURES,$VIDEOS,$NETHOOD,$FONTS,$TEMPLATES,$ APPDATA,$PRINTHOOD
  $INTERNET_CACHE,$COOKIES,$HISTORY,$PROFILE,$ ADMINTOOLS,$RESOURCES
  $RESOURCES_LOCALIZED,$CDBURN_AREA,$HWNDPARENT,$PLUGINSDIR。
  nsi 脚本中可用于调试的系统函数有 MessageBoxes、DetailPrint、Dumpstate。
  5. nsi脚本的编译器指令
  nsi 脚本的编译器指令主要指仅在编译时刻执行的命令。
  这些命令主要用来包含文件、条件化编译、定义常量、定义宏等。
  定义常量和宏是编译器指令最主要应用。
  定义常量的示例:
  !define VERSION "1.0.3"
  Name "My Program $"
  OutFile "My Program Installer - $.exe"
  定义宏的示例:
  !macro MyFunc UN
  Function $MyFunc
  Call $DoRegStuff
  ReadRegStr HKLM Software\MyProgram key
  DetailPrint
  FunctionEnd
  6. Modern UI
  Modern UI 是感观上模仿最新的 Windows 系统的界面风格,它由欢迎页面、结束页面和其他向导页面构成。
  7. 插件
  nsi 支持插件,通过插件可以方便的扩展 NSIS 安装程序的功能。
  NSIS 插件是用 C++、Delphi 等语言编写的 dll,在 nsi 脚本中调用 nsi 中的函数使用如下语法:
  DLLName::FunctionName "参数1" "参数2" "参数3"
  示例1:
  nsExec::ExecToLog '"$\makensis.exe" /CMDHELP'
  执行makensis.exe命令,显示该命令用法。
  示例2:
  InstallOptions::dialog "$PLUGINSDIR\test.ini"
  显示对话框
  示例3:
  NSISdl::download http://download.nullsoft.com/winamp/client/winamp291_lite.exe $R0
  下载文件
  8. NSIS 搜索插件的策略
  默认情况下 NSIS 在其安装目录的子目录 Plugins 中搜索插件,用户可以使用 !addplugindir 指定增加插件的目录位置。
  9. nsi 脚本的基本语法
  9.1 注释
  单行注释用井号“#”或分号“;”,跨行注释用可以用“C/C++”中注释语法。
  9.2 数据类型
  9.2.1 数字
  数字常量可以用十进制、十六进制(0x为前缀)、八进制(0为前缀)表示。
  颜色用类似 HTML 的中 RGB 表示法,但去 井号“#”。
  9.2.2 字符串
  字符串常量可以用引号引用,转意字符用"$\"作前缀。
  美元符号、常用转意字符换行、回车、制表符的nsi语法表示分别为:$$,$\n,$\r,$\t
  9.2.3 续行符
  nsi 脚本用行尾的反斜杠“\”表示下一行和当前行逻辑上是同一行。
  9.2.4 默认头文件
  如果在makensis同目录下有nsisconf.nsh文件,该文件会被自动包含,除非编译时指定/NOCONFIG选项。
  9.2.5 标号
  nsi 使用 GOTO 语句和 IfErrors、MessageBox、IfFileExists 及 StrCmp 进行程序控制流表示,标号是这些语句的目标语句。
  标号定义的语法:标号:语句
  标号必须定义在函数和区段中,其作用范围仅限于定义它的区段或函数。以点号“.”开头的标号是全局标号。
  9.3 相对跳转
  nsi 脚本常常使用相对跳转表示条件分枝,其语法是 [+-][1-9],加号表示从当前位置往前跳转,减号则表示从当前位置往后跳转。
  数字表示跳转的语句条数。
  示例:
  Goto +4
  MessageBox MB_OK "The following message will be skipped"
  Goto +3
  MessageBox MB_OK "You will never ever see this message box"
  Goto -3
  MessageBox MB_OK "Done"
  10. 页面
  向导页面是 NSIS 安装程序中最重要的界面元素,在 nsi 脚本中可以使用 NSIS 内置页面或者定制界面,通过脚本可以指定页面的顺序、显示样子和行为。Page指令用来定义安装程序中的页面,UninstPage用来定义,此外PageEx指令提供类是功能,但提供更多选项。页面的顺序和它在nsi脚本中出现的次序一致。
  示例:
  Page license
  Page components
  Page directory
  Page instfiles
  UninstPage uninstConfirm
  UninstPage instfiles
  规定安装程序首先显示license页面,然后显示components选择页面,接着显示安装目录选择页面。
  10.1 页面选项
  不同的页面有不同的选项:
  License page 有 LicenseText、LicenseData、LicenseForceSelection;
  Components selection 页面有 ComponentText;
  Directory selection 页面有 DirText、DirVar (仅能在 PageEx 中使用)、DirVerify;
  Un/Installation log 页面有 DetailsButtonText、CompletedText;
  Uninstall confirmation 页面有 DirVar (仅能在 PageEx 中使用)、UninstallText。
  对于内置的 Page,NSIS 支持三个回调函数用于定制界面和验证,对于自定义页面 NSIS 支持两个回调函数。
  Page 指令语法:
  Page license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]
  或者:
  Page custom [creator_function] [leave_function] [caption]
  示例:
  Page license skipLicense "" stayInLicense
  Page custom customPage "" ": custom page"
  Page instfiles
  Function skipLicense
  MessageBox MB_YESNO "Do you want to skip the license page?" IDNO no
  Abort
  no:
  FunctionEnd
  Function stayInLicense
  MessageBox MB_YESNO "Do you want to stay in the license page?" IDNO no
  Abort
  no:
  FunctionEnd
  Function customPage
  GetTempFileName $R0
  File /oname=$R0 customPage.ini
  InstallOptions::dialog $R0
  Pop $R1
  StrCmp $R1 "cancel" done
  StrCmp $R1 "back" done
  StrCmp $R1 "success" done
  error: MessageBox MB_OK|MB_ICONSTOP "InstallOptions error:$\r$\n$R1"
  done:
  FunctionEnd
  UninstPage 指令语法
  UninstPage custom [creator_function] [leave_function] [caption]
  或
  UninstPage (license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]
  PageEx 语法
  PageEx 使用嵌套结构,比如:
  PageEx license
  LicenseText "Readme"
  LicenseData readme.rtf
  PageCallbacks licensePre licenseShow licenseLeave
  PageExEnd
  11. 常用的 nsi 指令
  nsi 大致可以分为基本指令、注册表及 ini 操作指令、通用指令、流程控制指令、文件操作指令、卸载指令、字符串处理指令、多语言支持指令、重启指令。
  以下是常用的基本指令:
  (1) Delete:
  Delete [/REBOOTOK] file
  (2) Exec:
  Exec command
  (3) ExecShell:
  ExecShell action command [parameters] [SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED | SW_HIDE]ExecShell "open" 示例" http://nsis.sf.net/"
  ExecWait
  ExecWait command
  示例:
  ExecWait '"$INSTDIR\someprogram.exe"'
  ExecWait '"$INSTDIR\someprogram.exe"'
  DetailPrint "some program returned "
  (4) File:
  File [/nonfatal] [/a] ([/r] [/x file|wildcard [...]] (file|wildcard) [...] | /oname=file.dat infile.dat)
  /r选项用作递归模式,/x用于排出文件
  示例:
  File something.exe
  File /a something.exe
  File *.exe
  File /r *.dat
  File /r data
  File /oname=$TEMP\temp.dat somefile.ext
  File /nonfatal "a file that might not exist"
  File /r /x CVS myproject
  File /r /x *.res /x *.obj /x *.pch source
  (5) Rename:
  Rename [/REBOOTOK] source_file dest_file
  (6) RMDir:
  RMDir [/r] [/REBOOTOK] directory_name

热心网友 时间:2024-11-24 02:04

解决办法:
1.用windows安装光盘修复一下。(很麻烦.不推荐.就不详细说了)
2.在命令行提示符下使用 /NCRC 开关参数执行安装程序,例如:若安装程序得文件名为“setup.exe”,那么就在命令行提示符下键入“setup.exe /NCRC”就可跳过 CRC 校验执行安装程序。

3.去搜索WindowsInstaller文件下载.安装后重新启动.(其实不重新启动也行,你会发现NCRC错误已经不会弹出了.)

这个出现问题哪下得东西都装不上的!!

热心网友 时间:2024-11-24 02:04

安装程序不完整或被破坏,请下载最先版本的安装程序或购买。(不用太担心)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 孝感今天天气大河早上钓鱼 孝感天紫湖钓鱼怎么进去啊? 宝马325icc-id65是什么意思 刻有ifpi cc***的CD就一定是高仿吗? 宝马325i和大众CC哪个好? 宝马325VS大众CC 先纠结于CC与325间,请车友分析下CC和325的区别吧 怎么安装DVD兼容器啊? 为什么我做了个多导睡眠监测花了上千多? 打呼噜利害,需要做多导睡眠图检查,一般需要多少钱? 在浙一浙二做个多导睡眠监测要多少钱 红旗eqm5交付周期 与合资B级车实力并肩的2022款红旗H5 1.8车型如何? 著名的兵法名言有哪些? 孝感野猪湖钓鱼收费吗 抖音能用搜人吗- 问一问 抖音资料里加上违规吗? 抖音上别人发的文案有能加吗 抖音上别人要可以给嘛 800字的军训心得,速求 HM VNISEdit没有语言文件? NSIS运行 游戏出现input area ld怎样解决 hypermesh 中为什么建立了材料后不能card edit?左下角显示“hm_editcard:no template loaded”谢谢 C++使用ADO添加数据,为什么在执行的时候总是提示sql出问题了?我这条执行的语句有没有问题?这个方法对吗 用什么可以清除混凝土上的沥青 浙江省临海市大田的邮编是多少 浙江省临海市大田镇的 大田县邮政编码是多少? 台州市大田邮编 大田的邮政编码366100怎么来的?急急急 大田邮政编码是多少平度市 收房交契税是怎么回事 韩国大田市邮编多少啊?急用 大田广平邮政编码 韩国大田市邮政编码是多少啊?谢谢!急用! 浙江省临海市大田邮编 手机顶部显示hd是什么意思 手机顶部显示hd指的是什么 孝感有什么好玩的地方没?来这里读书这么长时间都没发现啊 孝感乡钓鱼要门票吗 武汉湖工大自驾到孝感八一大桥钓鱼要多少小时?