关于NSIS 写入注册表的问题, REG_MULTI_SZ 类型

在官方论坛找到了这个插件,传上来共享,这个插件不错,支持很多类型的键值的读取和写入,真的非常不错,对于经常跟注册表打交道的汉化软件安装程序,一定要备一个

文件下载: 点击这里下载

至于不用插件,纯用脚本写的对于注册表这种类型的值的写入,以下是一个参考脚本例子。
引用来自 Untitled01,2006-5-13 2:36:24 引用来自 Untitled01,2006-5-13 2:36:24
OutFile "REG_MULTI_SZ_writer.exe"
Name "REG_MULTI_SZ"
ShowInstDetails show

!define HKEY_CLASSES_ROOT        0x80000000
!define HKEY_CURRENT_USER        0x80000001
!define HKEY_LOCAL_MACHINE      0x80000002
!define HKEY_USERS              0x80000003
!define HKEY_PERFORMANCE_DATA    0x80000004
!define HKEY_PERFORMANCE_TEXT    0x80000050
!define HKEY_PERFORMANCE_NLSTEXT 0x80000060
!define HKEY_CURRENT_CONFIG      0x80000005
!define HKEY_DYN_DATA            0x80000006

!define KEY_QUERY_VALUE          0x0001
!define KEY_SET_VALUE            0x0002
!define KEY_create_SUB_KEY      0x0004
!define KEY_ENUMERATE_SUB_KEYS  0x0008
!define KEY_NOTIFY              0x0010
!define KEY_create_LINK          0x0020

!define REG_NONE                0
!define REG_SZ                  1
!define REG_EXPAND_SZ            2
!define REG_BINARY              3
!define REG_DWORD                4
!define REG_DWORD_LITTLE_ENDIAN  4
!define REG_DWORD_BIG_ENDIAN    5
!define REG_LINK                6
!define REG_MULTI_SZ            7

!define RegcreateKey            "Advapi32::RegcreateKeyA(i, t, *i) i"
!define RegSetValueEx            "Advapi32::RegSetValueExA(i, t, i, i, i, i) i"
!define RegCloseKey              "Advapi32::RegCloseKeyA(i) i"

####### Edit this!
!define ROOT_KEY                "${HKEY_LOCAL_MACHINE}"
!define SUB_KEY                  "SOFTWARE/NSIS"
!define VALUE                    "RegMultiSzTest"
!define DATA_1                  "First string"
!define DATA_2                  "Second string"
####### Stop editing

Section "Write"
  
SetPluginUnload alwaysoff
  
; create a buffer for the multi_sz value
  
System::Call "*(&t${NSIS_MAX_STRLEN}) i.r1"
  
; Open/create the registry key
  
System::Call "${RegcreateKey}(${ROOT_KEY}, '${SUB_KEY}', .r0) .r9"
  
; Failed?
  
IntCmp $9 0 write
    MessageBox MB_OK|MB_ICONSTOP "Can't create registry key! ($9)"
    
Goto noClose

   write:
    ; Fill in the buffer with our strings
    
StrCpy $2 $1                            ; Initial position

    
StrLen $9 '${DATA_1}'                  ; Length of first string
    
IntOp $9 $9 + 1                        ; Plus null
    
System::Call "*$2(&t$9 '${DATA_1}')"    ; Place the string
    
IntOp $2 $2 + $9                        ; Advance to the next position

    
StrLen $9 '${DATA_2}'                  ; Length of second string
    
IntOp $9 $9 + 1                        ; Plus null
    
System::Call "*$2(&t$9 '${DATA_2}')"    ; Place the string
    
IntOp $2 $2 + $9                        ; Advance to the next position

    
System::Call "*$2(&t1 '')"              ; Place the terminating null
    
IntOp $2 $2 + 1                        ; Advance to the next position

     ; create/write the value
    
IntOp $2 $2 - $1                        ; Total length
    
System::Call "${RegSetValueEx}(r0, '${VALUE}', 0, ${REG_MULTI_SZ}, r1, r2) .r9"
    
; Failed?
    
IntCmp $9 0 done
      MessageBox MB_OK|MB_ICONSTOP "Can't set key value! ($9)"
      
Goto done

   done:
    ; Close the registry key
    
System::Call "${RegCloseKey}(r0)"

noClose:
  ; Clear the buffer
  
SetPluginUnload manual
  
System::Free $1
SectionEnd
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值