NSIS是一個非常知名的小巧且功能強(qiáng)大的安裝程序打包工具,對于新手來說,很多人不知道NSIS讀取注冊表、NSIS寫入/刪除注冊表鍵值怎么操作,下面小編就給大家分享NSIS基礎(chǔ)入門教程之: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 設(shè)置為 所有 與 HKCU 如果 SetShellVarContext 設(shè)置為 當(dāng)前。
如果無法將字符串寫入注冊表,則會設(shè)置錯誤標(biāo)志。WriteRegStr的字符串類型為REG_SZ,WriteRegExpandStr為REG_EXPAND_STR。如果注冊表項(xiàng)不存在,則將創(chuàng)建它
- WriteRegExpandStr HKLM "Software\My Company\My Software" "Expand String Value" "%WINDIR%\ notepad.exe"
3、ReadRegDword
作用:從注冊表中讀取32位DWORD到用戶變量$ x。root_key的有效值列在WriteRegStr下。
如果DWORD不存在,將設(shè)置錯誤標(biāo)志并將$ x設(shè)置為空字符串(“”為0)。如果該值存在但不是DWORD,則將其作為字符串讀取,并將設(shè)置錯誤標(biāo)志。
- ReadRegDWORD $0 HKLM Software \ NSIS VersionBuild
4、DeleteRegKey
作用:刪除注冊表項(xiàng)。
如果指定了/ ifempty,則只有在沒有子項(xiàng)的情況下才會刪除注冊表項(xiàng)(否則,將刪除整個注冊表樹)。root_key的有效值列在WriteRegStr下 。如果無法從注冊表中刪除密鑰(或者如果它不存在,則設(shè)置錯誤標(biāo)志)
[/ ifempty] root_key子項(xiàng)
- DeleteRegKey HKLM "Software\My Company\My Software"
- DeleteRegKey /ifempty HKLM "Software\A key that might have subkeys"
5、DeleteRegValue
作用:刪除注冊表值
root_key的有效值列在WriteRegStr下。如果無法從注冊表中刪除該值(或者如果它不存在,則設(shè)置錯誤標(biāo)志)。
- DeleteRegValue HKLM "Software\My Company\My Software" "some value"
6、EnumRegKey
作用:user_var(輸出)root_key子鍵索引
使用root_key \ Subkey中的'index'th注冊表項(xiàng)的名稱設(shè)置用戶變量$ x。root_key的有效值列在WriteRegStr下。如果沒有其他鍵,則返回空字符串,并返回空字符串,并在出現(xiàn)錯誤時設(shè)置錯誤標(biāo)志。
- 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注冊表值的名稱設(shè)置用戶變量$ x。root_key的有效值列在WriteRegStr下。返回一個空字符串,如果沒有更多值或者有錯誤,則設(shè)置錯誤標(biāo)志。
- 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 檢測程序版本號、注冊表的寫入與讀取實(shí)例分享
- !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 ;用戶變量(輸出) 根鍵 子鍵 項(xiàng)
-
- ${IF} $0 != ""
- IntCmp ${PRODUCT_VERSION} $0 0 Old New
- MessageBox MB_YESNO "安裝程序檢測到 $PRODUCT_NAME 已經(jīng)安裝,是否覆蓋安裝" IDYES Y IDNO N
- N:
- Quit
- Old:
- MessageBox MB_ICONSTOP "安裝程序檢測到 $PRODUCT_NAME 已經(jīng)安裝了更新版本"
- Quit
- New:
- MessageBox MB_ICONSTOP "安裝程序檢測到 $PRODUCT_NAME 已經(jīng)安裝了舊版本,繼續(xù)更新安裝"
- ${ENDIF}
- Y:
- FunctionEnd
-
- #寫入注冊表的實(shí)例
- WriteUninstaller "$INSTDIR\uninst.exe" ;生成卸載exe,自動調(diào)用section Uninstall
- WriteRegStr HKLM "${PRODUCT_INSTALL_KEY}" "Version" "${PRODUCT_VERSION}" ; 根鍵 子鍵 項(xiàng) 值
|