NSIS 常用小问题合集(论坛搜索整理,经常更新)

问: 在安装过程中按“取消”的话,会弹出是否终止安装的确认窗口,请问怎样设置可以让这个窗口不要出现,按“取消”就直接退出呢?答: !define MUI_ABORTWARNING把这句去掉就可以了….

问: 如图所示的地方,现在显示的是“setup 将安装…”,除了用自定义字串来修改这个地方以外,如何把这个setup搞成其他的?比如“安装程序现在将…” 答: DirText "安装程序将安装 $(^NameDA) 在下列文件夹。要安装到不同文件夹,单击 [浏览(B)] 并选择其他的文件夹。 $_CLICK"

附图:

问: 如何定义欢迎页面的标题字体大小。如下图所示,图三红色框内的标题字体。答: 使用以下脚本!define MUI_PAGE_CUSTOMFUNCTION_SHOW ChageFONT!insertmacro MUI_PAGE_WELCOMEFunction ChageFONT GetDlgItem $0 $MUI_HWND 1201 createFont $1 "Tahoma" "11" "700" SendMessage $0 ${WM_SETFONT} $1 0FunctionEnd

附图:

问: 添加版本号VIProductVersion "1.2.3.4"VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Test Application"VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "A test comment"VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "Fake company"VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "Test Application is a trademark of Fake company"VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "?Fake company"VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Test Application"VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "1.2.3"在脚本中加入上面的代码,则为 NSIS 生成的 exe 添加版本信息。问题就是,能否让属性中语言显示为“中文(中国)”?如附图1答: 中文 ID 是 2052。 把 ${LANG_ENGLISH} 改为 2052。问: 用 2052 之后确实变成“中文(中国)”了。但其他内容仍旧是乱码,不知有什么办法可以解决吗?如附图2答: 版本信息设置语句,放在 !insertmacro MUI_LANGUAGE 的后面,NSIS 要注重次序的。如果使用古典界面,放在 LoadLanguageFile "${NSISDIR}/Contrib/Language files/SimpChinese.nlf" 的后面。

附图:

问: 如何禁止显示如附图中的 banner 。答: 图示的效果是因为安装程序初始化的时候,也就是 .onInit 函数里需要用到某个文件的时候安装程序需要搜索整个数据区块来把它解压出来,当安装程序比较大的时候搜索比较费时,这个时候才显示解压百分比。一般都是用 ReserveFile 来避开这种搜索。比如 Function .onInit 里有InitPluginsDirFile "/oname=$PLUGINSDIR/io.ini" "./io.ini"或者其他类似的话,安装程序就需要搜索并解压这个文件一般在脚本头部加 ReserveFile "./io.ini"这样 io.ini 就保存在数据区块的尾部,安装程序初始化的时候就不用搜索整个数据区块了,相当于加快了安装程序的启动速度。问: 根据以上方法使用了,确实不会再出现初始化的对话框了,但是在自定义的 InstallOptions 页显示前,程序还是会停顿一段时间,请问这是为何?如何避免? 答: 某些控件比较消耗时间的,比如显示 ICON、位图 等,如果 InstallOptions 里含有这些控件可能会停顿。如果 InstallOptions 是第一个页面的话还要把 InstallOptions.dll 加入到 ReserveFile 参数里。再或者就是进入 InstallOptions 的时候含有比较复杂的指令,比如循环等。一般在加入ReserveFile ${NSISDIR}/Plugins/InstallOptions.dll 既可避免。

附图:

问: 如何运行一个安装文件 .inf 答: ExecWait "RunDll32 advpack.dll,LaunchINFSection skins.inf,DefaultInstall"

问: 关联文件图标后,图标没变化。答: 刷新图标用, System::Call shell32.dll::SHChangeNotify(l, l, i, i) v (0x08000000, 0, 0, 0)

问: 我用NSIS做好了一个安装程序,因为数据较多,一共有400多M,用的LZMA压缩方式,做好后的安装程序约200M,但是我发现在运行这个安装程序时会在系统TEMP目录产生一个同安装后的全部内容同样大的临时文件(一边运行一边加大,最后到400多M去了),如果我做的程序小倒没什么,可是这个程序有400多M,除了要写入安装的数据外还要同样大小的空间放临时文件,这样子也实在是太花不来,我想请问:有什么办法能让其在安装时不使用这么多的临时空间吗?安装的脚本是用HM NIS Edit的向导生成的。答: 这是因为 NSIS 在用 LZMA 时采用了固实压缩,何谓固实压缩,其实就是把所有文件统一起来压缩,所以这样压出来的文件更加的小,同时也带来了一个问题,安装解压的时候,在临时文件夹中生成一个临时文件,随着安装的进程逐渐增大,到最后,需要临时文件会变成跟原安装程序一样大,也就是说,需要原安装程序 2 倍的空间才可以安装这个程序,所以对于安装大量文件时,这是不适合的。NSIS 2.07 版本之前 LZMA 算法是固实压缩的,没有非固实的选项,如果需要这样做,只有下载非固实压缩的编译器,但是 2.07 后的 NSIS 的 LZMA 压缩已经改为默认非固实压缩了,所以这个问题同时也不再存在。如果在制作少量文件的安装时,仍然想取用固实压缩可以加入 /SOLID 参数。像这样: SetCompressor /SOLID lzma

或者在河边放下一盏写着心愿的河灯,祝愿一切安好。

NSIS 常用小问题合集(论坛搜索整理,经常更新)

相关文章:

你感兴趣的文章:

标签云: