首页
加群
推荐
用户手册
Search
1
NSIS把程序快捷方式钉到最新版WIN10的任务栏
8,003 阅读
2
NSIS错误(NSIS Error)的原因和解决方法总结
6,372 阅读
3
NSIS v2.51 集成增强版 - 20200301
3,229 阅读
4
NSIS 安装程序的界面结构
2,930 阅读
5
NSIS 源代码地址及新编译版本,防解包。
1,636 阅读
下载
教程
插件
登录
/
注册
Search
标签搜索
路径
PinToTaskbar
WIN10
任务栏
界面
窗口
NSIS Error
NSIS错误
源码
防解包
NSIS增强
完成页面
定制
释放文件
日志
卸载
时间戳
FILETIME
空格
中文
NSISFANS
累计撰写
29
篇文章
累计收到
129
条评论
首页
栏目
下载
教程
插件
页面
加群
推荐
用户手册
搜索到
17
篇与
教程
的结果
2022-01-14
NSIS使用安装日志卸载程序文件
贾可同学写的,安装时记录释放文件日志,卸载时根据日志记录进行卸载,有效防止误删文件。完整代码如下:
2022年01月14日
67 阅读
0 评论
0 点赞
2022-01-14
NSIS在64位系统中释放文件
现在64位的系统已在大行其道,有的软件甚至只出64位版本了,在系统中释放文件的小技巧,你知道吗?以下代码来自:北的愿望如果只在64位上释放64位的文件方法1:Section - ${If} ${RunningX64} SetOutPath "$WINDIR\SysNative" File "64位的文件" ${Else} # 这里 $WINDIR\System32 也可以用 $SYSDIR SetOutPath "$WINDIR\System32" File "32位的文件" ${EndIf} SectionEnd
2022年01月14日
50 阅读
0 评论
0 点赞
2022-01-14
NSIS安装完成页面定制
在安装完成后,我们可能需要为用户提供可选的运行选项,如:运行XXX程序、打开Readme文件、访问XXX网站等。下面是MUI_FINISHPAGE支持的属性。运行XXX程序!define MUI_FINISHPAGE_RUN!define MUI_FINISHPAGE_RUN_TEXT!define MUI_FINISHPAGE_RUN_PARAMETERS!define MUI_FINISHPAGE_RUN_NOTCHECKED ;默认不选中!define MUI_FINISHPAGE_RUN_FUNCTION; 自述文件!define MUI_FINISHPAGE_SHOWREADME!define MUI_FINISHPAGE_SHOWREADME_TEXT!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED!define MUI_FINISHPAGE_SHOWREADME_FUNCTION访问XXX网站!define MUI_FINISHPAGE_LINK!define MUI_FINISHPAGE_LINK_LOCATION!define MUI_FINISHPAGE_LINK_COLOR示例:; 引用MUI2.nsh头文件 !include "MUI2.nsh" ; 定义完成后要运行的程序 !define MUI_FINISHPAGE_RUN !define MUI_FINISHPAGE_RUN_FUNCTION "runSoft" !define MUI_FINISHPAGE_RUN_TEXT "运行 $SoftName" Function "runSoft" /* 运行的程序,可以多个 如果只运行一个程序,可以这么写: !define MUI_FINISHPAGE_RUN "$INSTDIR\XXX.exe" */ FunctionEnd ; 自述文件 !define MUI_FINISHPAGE_SHOWREADME "readme.txt" ; 默认不选中自述文件复选框 !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED ; 访问XXX网站 !define MUI_FINISHPAGE_LINK "XXX" !define MUI_FINISHPAGE_LINK_LOCATION "http://www.XXX.com" ; 文字颜色为红 !define MUI_FINISHPAGE_LINK_COLOR "FF0000"
2022年01月14日
136 阅读
0 评论
0 点赞
2021-02-04
NSIS错误(NSIS Error)的原因和解决方法总结
NSIS 是一个脚本安装程序制作系统,通过编译脚本来生成安装程序。安装程序的作用就是帮助用户完整软件的安装。由于大型软件的安装过程不仅仅涉及复制文件,还有操作注册表甚至系统服务等,不可能手工操作,于是就有了安装程序。安装程序通常都是一个独立的 exe 文件。此文件不仅仅将软件所需的所有文件压缩在内,而且还包括一个向导界面及安装时要执行的操作指令,可以完成复制文件、写入注册表、创建系统服务等,以及很多其他操作。使用 NSIS 生成的安装程序默认开启了自校验功能,以防止安装程序被非法修改或者用户使用损坏的安装程序来安装软件。通常情况下,NSIS 错误的描述是这样的:NSIS 创建的安装程序的错误信息:Installer integrity check has failed. Common causes includeincomplete download and damaged media. Contact theinstaller's author to obtain a new copy.More information at:http://nsis.sf.net/NSIS_Error中文翻译:安装程序完整性检查失败!常见原因包括下载不完整或介质损坏等。联系安装程序的作者以获得一个新的副本。更多信息:http://nsis.sf.net/NSIS_Error使用 NSIS 2.35 之前版本创建的安装程序,NSIS 错误描述是这样的(注:使用 NSIS 2.35 之前版本创建的安装程序,指安装程序的制作者在制作安装程序时使用的 NSIS 版本,与安装程序自身无关。):The installer you are trying to use is corrupted or incomplete.This could be the result of a damaged disk, a failed download or a virus.You may want to contact the author of this installer to obtain a new copy.It may be possible to skip this check using the /NCRC command line switch(NOT RECOMMENDED).中文翻译:你正在使用的安装程序不完整或者已损坏。这可能是磁盘损坏、下载失败或病毒导致的结果。你可能需要联系安装程序的作者获取一个新的副本。或许也可以通过命令行开关 /NCRC 跳过检查(不推荐)。NSIS 是国外软件,以上是官方原版的错误提示,但实际中遇到的 NSIS 错误提示文字也有可能是其他内容。由于 NSIS 为免费开源软件,所有不排除有编程爱好者修改 NSIS 源码中这段错误文字后重新编译了自己专用的 NSIS 版本来创建安装程序。NSIS 的自校验检查可以在生成安装程序的时候使用 CRCCheck off 关闭检查,这样安装程序不会进行检查,自然也不会弹出“NSIS Error”(即“NSIS 错误”)。NSIS 还提供了另外一种方式,也就是通过命令行参数 /NCRC 来跳过 CRC 检查。这是对通常情况下创建的安装程序,也就是默认启用了 CRC 检查的安装程序提供的一个万不得已的启动方式。如今的图形界面大行其道,鼠标双击代替了敲击命令,使得很多人对命令行参数一知半解。在 Windows 下,直接双击执行 exe 是不附带任何参数的,故加参数运行只能间接实现。给程序添加参数运行有两种方式:1.命令行直接添加;2.创建快捷方式后在目标栏添加。1.通过命令行添加参数官方提到的使用命令行参数 /NCRC 的办法:通过开始菜单打开“运行”对话框并输入 cmd 并点确定,即弹出命令提示符。Windows Vista、Windows 7 可以在开始菜单搜索框直接输入 cmd 按回车,也可以通过 Windows 徽标键 + R 来打开运行对话框(Windows 徽标键位于 Ctrl 和 Alt 之间,但并不是每个键盘都有)。将安装程序用鼠标左键拖到命令行窗口,即自动出现路径,带空格的路径自动加引号,然后在路径后面输入至少一个空格和 /NCRC,NCRC 四个字母必须全部大写。2.通过快捷方式添加参数在安装程序上面点右键,选择“创建快捷方式”。然后在创建出来的快捷方式文件上点右键,选择属性,在其“目标”栏的原有路径后面加上空格和 /NCRC,完后点击确定。然后双击快捷方式即可启动安装程序,此时将会使用 /NCRC 参数启动安装程序。{message type="warning" content="注意"/}方法1中,对于带空格的路径,将文件拖到命令行上,路径两侧会自动添加引号。方法2在快捷方式目标栏的带空格路径后面添加 /NCRC 时,必须注意路径两侧的引号。方法2中默认情况下这个引号是存在的,但添加参数时切不可删除,路径仍需使用引号包括,并且参数与路径之间至少使用一个空格分隔。总之:路径与参数之间必须用英文空格分隔,而且后面的 /NCRC 也必须是英文字符,字母必须全部大写。在输入时一定要确保输入法已经关闭,否则可能输入错误。官方不推荐使用以上命令行参数来执行安装程序,除非任何办法都不能解决问题时可考虑使用 /NCRC 参数跳过文件校验启动安装程序,但这并不是完美的解决办法。如果安装程序本身已经严重损坏或并未下载完成,那么即使你使用 /NCRC 来启动安装程序,跳过了自校验,只能保证安装程序可以启动,并不能保证安装过程不会出现错误,或者安装可以成功,但由于数据损坏导致软件无法使用。下面这些情况,可尝试通过 /NCRC 来安装,例如:电脑中病毒,安装包被感染,而后使用杀毒软件清除了安装程序的病毒;又如:下载工具下载到 99.9% 而无法下载成功,此时可将未下载完成的文件扩展名改名为 exe……这些情况下可以认为安装程序数据基本完整,可尝试使用 /NCRC 的命令行参数来解决。该错误提示从根本上讲是文件损坏,但文件损坏的原因多种多样,也有可能是某些人提到的硬盘坏道,或者内存问题导致系统读取的数据不完整(文件可能并未损坏),更有可能是其他不确定的原因。来源:https://tieba.baidu.com/p/1813727179
2021年02月04日
6,372 阅读
0 评论
0 点赞
2021-02-01
NSIS 安装程序的界面结构
作者:贾可一般由 NSIS 安装程序的界面样式如图 1 所示。它由以下几层界面构成:父窗口、父窗口上的控件、子窗口(每个单独的页面都是一个子窗口)、子窗口上的控件。虽然控件也是窗口,但是我们这里根据属性的不同在名称上作以区分。父窗口上的控件和子窗口都是父窗口的儿子,而子窗口上的控件是子窗口的儿子,父窗口的孙子。这层关系一定要先理清楚。下面对这些窗口的作用,以及它们在 NSIS 中的一些相关逻辑进行简单说明。以下所提及的 MUI 均代表 MUI 和 MUI2 的统称,并非特指 MUI 第一代。不包含 MUI 头文件的情况下,我们称之为经典 UI,即 CUI,对应的 UI 界面也相对较小,如图 2 所示。1、父窗口父窗口即最外层的窗口,是整个 NSIS 界面的基础。父窗口在 NSIS 的 UI 文件或安装程序的资源的 ID 为 105,在 NSIS 源码中,其被定义为宏名称 IDD_INST。在 CUI 中使用 ChangeUI命令替换对话框时,参数 IDD_INST 用于指定替换父窗口。在 MUI 中,头文件已经默认使用ChangeUI all 替换了全部对话框。父窗口在整个安装界面过程中只初始化一次,因此,很多针对父窗口的操作也只需要在.onGUIInit 函数中进行一次(MUI 需要定义一个 MUI_CUSTOMFUNCTION_GUIINIT 函数来替代.onGUIInit)。当然,如果你要在每个页面上单独对父窗口做一些处理,可以在对应的页面显示函数中单独进行处理,通常不需要这么做。父窗口上的控件通常包括:上一步(ID 为 3)、下一步(ID 为 1)、取消(ID 为 2),以及 NSIS 版本文字和水平线。在 MUI 中,父窗口还包括顶部的标题(ID 为 1037)和副标题(ID 为 1038),以及安装程序图标或安装程序 logo 图片。父窗口还包括一个 ID 为 1018 的控件(IDC_CHILDRECT)。此控件默认样式是隐藏的,其唯一作用就是 NSIS 创建子窗口时会根据此控件的位置和大小来创建。即它只是一个起参考作用的控件,仅仅用来确定子窗口的位置和大小。使用 Resource Hacker之类的工具打开NSIS安装目录中的Contrib文件夹中UIs文件夹中的modern.exe这个界面演示文件来验证这个问题。可以看到 ID 为 102~104、106~109 的对话框的大小默认为 300×140,而 ID 为 105 对话框中的 1018 控件大小也是 300×140。MUI 头文件引入了欢迎页面、开始菜单文件夹选择页面和完成页面。这些页面不属于内置页面,均由 MUI 头文件完成。同时,在 MUI 的界面资源中,父窗口又引入了一个 ID 为 1044 的控件。此控件默认样式同样也是隐藏的,其唯一作用就是在 MUI 中用作创建欢迎和完成页面子窗口的位置和大小参考。此外,MUI 头文件中还实现了在欢迎和完成页面隐藏 NSIS 版本文字和水平线的功能。总而言之,父窗口上的这些控件的 HWND、位置、大小等在整个安装过程是不变的,只有文字和显示状态发生改变。父窗口自身的 HANDLE(即 HWND)值可以在 NSIS 脚本中通过$HWNDPARENT 变量来引用。除了.onInit 函数及其调用的函数,其他执行代码段中该值均有效。此 HWND 值可用于绝大多数 Windows API 如 GetClientRect、ShowWindow、SendMessage 等以获取或设置窗口的属性。部分的 API 在 NSIS 中已有对应的封装命令,如 ShowWindow 和 SendMessage 等。其他 NSIS 未提供对应命令的 API 可使用 System::Call 来调用。要控制父窗口上的控件,我们通常使用 GetDlgItem 通过 ID 来获取对应控件的 HWND 值。由于父窗口上控件是不会变动的,所以只需要在.onGUIInit 中对这些控件做出调整即可。例如,在.onGUIInit 函数中,将标题和副标题控件的文字颜色设置为红色。GetDlgItem $0 $HWNDPARENT 1037 SetCtlColors $0 0xFF0000 transparent GetDlgItem $0 $HWNDPARENT 1038 SetCtlColors $0 0xFF0000 transparent2、子窗口子窗口即上面图中虚线框区域所属的窗口,子窗口不是固定的窗口。每一个安装页面都是一个独立的子窗口,且同一时刻只存在一个子窗口。子窗口在 NSIS 的 UI 文件或安装程序的资源的 ID 为除 105(IDD_INST)和 111(IDD_VERIFY)之外的所有窗口资源。在 CUI 中使用 ChangeUI 命令替换对话框资源时,参数 IDD_LICENSE、IDD_DIR、IDD_SELCOM、IDD_INSTFILES、IDD_UNINST 用于指定替换对应的窗口。上面已经提到过,欢迎页面、开始菜单文件夹选择页面和完成页面由 MUI 实现,这些 ID 不包括这三个页面。在 MUI 中,头文件已经默认使用 ChangeUI all 替换了全部对话框。当点击父窗口上的上一步、下一步时,NSIS 会销毁当前子窗口,并创建新的子窗口。所以,子窗口上的数据并不会保留,而是需要每次创建成功后,都会重新设置一次。所有内置界面的这些逻辑均由 NSIS 完成。如果创建自定义界面,则需要使用在整个安装期间值都能保持稳定的变量自行保存界面上的数据,在界面创建的时候更新对应的控件内容,在控件内容变化的时候及时更新对应的变量。每个独立的页面都有一个内置的名称,如 directory、components、instfiles 等。在CUI 中使用这些页面的时候,可以为其指定三个回调函数。如:Page directory DirPage.Pre DirPage.Show DirPage.Leave这三个回调的顺序是固定的,但可以部分或者全部忽略,不需要的可以留空或者不指定。而在 MUI 中则使用如下的方式来指定这三个页面回调函数:;指定对应的回调函数名(对下面最近的页面有效) !define MUI_PAGE_CUSTOMFUNCTION_PRE DirPage.Pre !define MUI_PAGE_CUSTOMFUNCTION_SHOW DirPage.Show !define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirPage.Leave ;立即插入对应的页面 !insertmacro MUI_PAGE_DIRECTORY这种方式对宏定义的顺序要求就没那么严格,对用的语句由头文件来实现。在内置页面回调函数中可以进行一些基本操作,在 Pre 函数中,可以调用 Abort 跳过当前页面。在 Show 函数中,可以获取到当前对话框的 HWND,以便控制和操作界面上控件。在Leave 函数中,可以调用 Abort 停留在当前页面。而自定义界面只有两个回调函数:Create函数和 Leave 函数。这是因为在调用自定义界面插件的 Create 函数,如 nsDialogs::Show之前,可以调用 Abort 跳过自定义界面,也可以得到对话框的 HWND、控件的 HWND 以操作控件,即自定义页面的 Create 函数可以实现内置页面的 Pre 和 Show 这两个函数的逻辑。由于子窗口上的控件属于子窗口,以及子窗口在切换页面时会销毁或创建,所以如果要控制内置子窗口上的控件,我们需要在内置页面的 Show 回调函数中先使用 FindWindow 命令获取子窗口的 HWND,然后再使用 GetDlgItem 通过子窗口上的控件 ID 来获取对应控件的 HWND 值,再对这些控件做出调整。示例代码如下,仅供参考。实际的控件 ID 可使用 Resource Hacker 之类的工具在对应的窗口资源中查找。FindWindow $R0 "#32770" "" $HWNDPARENT GetDlgItem $0 $R0 1000 SendMessage $0 ${WM_SETTEXT} 0 STR:$INSTDIR自定义界面中则不需要这么麻烦。比如使用 nsDialogs 时,nsDialogs::Create 的返回值就是子窗口的 HWND,${NSD_Create*}的返回值则是控件的 HWND。3、自定义 UI如果要使用自定义的对话框资源替换内置的对话框,需要注意几点:每个对话框中都有一些必须保留的控件 ID,修改 UI 时只能调整它们的位置和大小,不能删除这些基本控件。如,安装过程页面必须保留进度条。参考 NSIS.chm 的 ChangeUI 命令。所有的子窗口(除了 111 之外)的大小必须和父窗口(105)中的 1018 保持严格一致。如果大小不一致,可能窗口会显示不全,或者多出一些区域。
2021年02月01日
2,930 阅读
0 评论
1 点赞
1
2