网站首页/硬件软件列表/内容

NSIS读取注册表_NSIS写入/删除注册表键值基础基础图文详细教程

硬件软件2024-04-11阅读

NSIS是一个非常知名的小巧且功能强大的安装程序打包工具,对于新手来说,很多人不知道NSIS读取注册表、NSIS写入/删除注册表键值怎么操作,下面小编就给大家分享NSIS基础入门教程之:NSIS读取/写入/删除注册表的操作命令代码。

NSIS读取注册表 NSIS写入/删除注册表键值基础入门教程

方法步骤:

1、WriteRegStr

作用:把字符串写入注册表。

  • WriteRegStr HKLM "Software\My Company\My Software" "String Value" "dead beef"

2、WriteRegExpandStr

作用:将一个字符串写入注册表

root_key  必须是以下之一:

HKCR  或  HKEY_CLASSES_ROOT

HKLM  或  HKEY_LOCAL_MACHINE

HKCU  或  HKEY_CURRENT_USER

HKU  或  HKEY_USERS

HKCC  或  HKEY_CURRENT_CONFIG

HKDD  或  HKEY_DYN_DATA

HKPD  或  HKEY_PERFORMANCE_DATA

SHCTX  或  SHELL_CONTEXT

如果  root_key  是  SHCTX  或  SHELL_CONTEXT,它会被替换成  HKLM  如果  SetShellVarContext  设置为  所有  与  HKCU 如果  SetShellVarContext  设置为  当前。

如果无法将字符串写入注册表,则会设置错误标志。WriteRegStr的字符串类型为REG_SZ,WriteRegExpandStr为REG_EXPAND_STR。如果注册表项不存在,则将创建它

  • WriteRegExpandStr HKLM "Software\My Company\My Software" "Expand String Value" "%WINDIR%\ notepad.exe"

3、ReadRegDword

作用:从注册表中读取32位DWORD到用户变量$ x。root_key的有效值列在WriteRegStr下。

如果DWORD不存在,将设置错误标志并将$ x设置为空字符串(“”为0)。如果该值存在但不是DWORD,则将其作为字符串读取,并将设置错误标志。

  • ReadRegDWORD $0 HKLM Software \ NSIS VersionBuild

4、DeleteRegKey

作用:删除注册表项。

如果指定了/ ifempty,则只有在没有子项的情况下才会删除注册表项(否则,将删除整个注册表树)。root_key的有效值列在WriteRegStr下  。如果无法从注册表中删除密钥(或者如果它不存在,则设置错误标志)

[/ ifempty] root_key子项

  • DeleteRegKey HKLM "Software\My Company\My Software"
  • DeleteRegKey /ifempty HKLM "Software\A key that might have subkeys"

5、DeleteRegValue

作用:删除注册表值

root_key的有效值列在WriteRegStr下。如果无法从注册表中删除该值(或者如果它不存在,则设置错误标志)。

  • DeleteRegValue HKLM "Software\My Company\My Software" "some value"

6、EnumRegKey

作用:user_var(输出)root_key子键索引

使用root_key \ Subkey中的'index'th注册表项的名称设置用户变量$ x。root_key的有效值列在WriteRegStr下。如果没有其他键,则返回空字符串,并返回空字符串,并在出现错误时设置错误标志。

  • StrCpy $0 0
  • loop:
  • EnumRegKey $1 HKLM Software $0
  • StrCmp $1 "" done
  • IntOp $0 $0 + 1
  • MessageBox MB_YESNO|MB_ICONQUESTION "$1$\n$\nMore?" IDYES loop
  • done:

7、EnumRegValue

作用:user_var(输出)root_key子键索引

使用root_key \ Subkey中'index'th注册表值的名称设置用户变量$ x。root_key的有效值列在WriteRegStr下。返回一个空字符串,如果没有更多值或者有错误,则设置错误标志。

  • StrCpy $0 0
  • loop:
  • ClearErrors
  • EnumRegValue $1 HKLM Software\Microsoft\windows\CurrentVersion $0
  • IfErrors done
  • IntOp $0 $0 + 1
  • ReadRegStr $2 HKLM Software\Microsoft\Windows\CurrentVersion $1
  • MessageBox MB_YESNO|MB_ICONQUESTION "$1 = $2$\n$\nMore?" IDYES loop
  • done:

NSIS 检测程序版本号、注册表的写入与读取实例分享

  • !define PRODUCT_NAME "pkpm"
  • !define PRODUCT_VERSION "1.0"
  • !define PRODUCT_PUBLISHER "My company, Inc."
  • !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
  • !define PRODUCT_INSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Install\${PRODUCT_NAME}"
  • !define PRODUCT_UNINST_ROOT_KEY "HKLM"
  •  
  • #检查程序的版本号
  • Function CompareVersion
  •  
  • #使用读取注册表检测版本号
  •  ReadRegStr $0 HKLM ${PRODUCT_INSTALL_KEY} "Version"   ;PRODUCT_VERSION      ;用户变量(输出) 根键 子键 项
  •  
  •  ${IF} $0 != ""
  •    IntCmp ${PRODUCT_VERSION} $0 0 Old New
  •     MessageBox MB_YESNO  "安装程序检测到 $PRODUCT_NAME 已经安装,是否覆盖安装" IDYES Y IDNO N
  •    N:  
  •     Quit
  •    Old:
  •      MessageBox MB_ICONSTOP "安装程序检测到 $PRODUCT_NAME 已经安装了更新版本"
  •      Quit
  •    New:
  •      MessageBox MB_ICONSTOP "安装程序检测到 $PRODUCT_NAME 已经安装了旧版本,继续更新安装"
  •  ${ENDIF}
  •  Y:
  • FunctionEnd
  •  
  • #写入注册表的实例
  • WriteUninstaller "$INSTDIR\uninst.exe"  ;生成卸载exe,自动调用section Uninstall
  • WriteRegStr HKLM "${PRODUCT_INSTALL_KEY}" "Version" "${PRODUCT_VERSION}"   ; 根键 子键 项 值
相关阅读