当前位置: 首页 > 文档资料 > NSIS 用户手册 >

4.4 相对跳转

优质
小牛编辑
128浏览
2023-12-01

和标记不一样,相对跳转就如其名一样,相对于被调用的地方。在任何你可用到标记的地方你也都可以相对跳转。相对跳转由数字标定。+1 跳转到下一条指令 (默认的步进),+2 会跳过一条指令也并且从当前指令转到第二条指令,-2 将往后跳两条指令,+10 将会跳过 9 条指令,从当前指令跳到第十条指令。

一条指令就是在安装程序运行时可以被执行的所有命令。MessageBoxGotoGetDLLVersionFileReadSetShellVarContext 都是指令。AddSizeSectionSectionGroupSectionEndSetOverwrite (和所有处于编译器标记)、NameSetFontLangString 都不是指令,因为它们在编译时就被执行。

例子:

 Goto +2
   MessageBox MB_OK "你将看不到这个信息框"
 MessageBox MB_OK "上一条信息被略过,这条信息才会被显示"
 Goto +4
 MessageBox MB_OK "随后的这条信息将会被略过"
 Goto +3
 MessageBox MB_OK "你将不会看到这个信息框"
 Goto -3
 MessageBox MB_OK "完成"

需要注意的是宏指令并不是真正意义上的一条指令,在编译时会被展开为若干条指令,所以你不能用相对跳转来跳过一条宏指令。下面的示例演示了相对跳转并没有真正跳过插入的宏 (仅仅是跳过了宏里的第一条指令),还是会显示一个消息框。

!macro relative_jump_test
  MessageBox MB_OK "第一条宏语句"
  MessageBox MB_OK "第二条宏语句"
!macroend
Goto +2
!insertmacro relative_jump_test