!include LogicLib.nsh !define PRODUCT_UNINST_ROOT_KEY "HKLM" !define PRODUCT_DIR_REGKEY "Software\JzbProductionTool" !define DIR "D:\JzbProductionTool\" Function .onInit ReadRegStr $R0 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_DIR_REGKEY}" "Path" ${If} $R0 != "" StrCpy $INSTDIR $R0 ${Else} StrCpy $INSTDIR ${DIR} ${EndIf} FunctionEnd
时间: 2023-11-21 11:06:26 浏览: 61
NSIS FindProc.dll+KillProcDLL.dll
这段 NSIS 脚本代码使用了 `LogicLib.nsh` 插件,定义了一些常量,并编写了一个 `.onInit` 回调函数。让我们逐行分析它的作用:
1. `!include LogicLib.nsh`:包含了 `LogicLib.nsh` 插件,该插件提供了一些逻辑判断和操作的函数。
2. `!define PRODUCT_UNINST_ROOT_KEY "HKLM"`:定义了一个常量 `PRODUCT_UNINST_ROOT_KEY`,表示产品的卸载根键,这里设置为 `HKLM`,即 HKEY_LOCAL_MACHINE。
3. `!define PRODUCT_DIR_REGKEY "Software\JzbProductionTool"`:定义了一个常量 `PRODUCT_DIR_REGKEY`,表示产品的注册表路径,这里设置为 `Software\JzbProductionTool`。
4. `!define DIR "D:\JzbProductionTool\"`:定义了一个常量 `DIR`,表示默认的安装路径,这里设置为 `D:\JzbProductionTool\`。
5. `Function .onInit`:定义了 `.onInit` 回调函数,在安装程序初始化时被调用。
6. `ReadRegStr $R0 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_DIR_REGKEY}" "Path"`:使用 `ReadRegStr` 函数读取注册表路径 `${PRODUCT_UNINST_ROOT_KEY}\${PRODUCT_DIR_REGKEY}` 中的键值 `"Path"`,将结果保存在变量 `$R0` 中。
7. `${If} $R0 != ""`:使用逻辑判断函数 `${If}` 判断变量 `$R0` 是否不为空。
8. `StrCpy $INSTDIR $R0`:如果 `$R0` 不为空,则将 `$R0` 的值赋给 `$INSTDIR`,即设置安装路径为上一次安装的路径。
9. `${Else}`:如果 `$R0` 为空,则执行下面的代码块。
10. `StrCpy $INSTDIR ${DIR}`:将默认的安装路径 `${DIR}` 赋给 `$INSTDIR`,即设置安装路径为默认路径。
11. `${EndIf}`:结束逻辑判断。
12. `FunctionEnd`:结束回调函数的定义。
总体来说,这段代码的作用是在安装程序初始化时读取注册表中的路径,如果存在上一次安装的路径,则使用该路径作为安装路径;如果不存在,则使用默认的路径。
阅读全文