2016-12-28 8 views
2

에 다중 문자열 레지스트리 값을 생성 ?하지만 문자열 유형, 나는이 응용 프로그램에 대한 레지스트리 항목을 만들 수 있습니다, 내 응용 프로그램 패키지를 만들려고 NSIS

+0

이 문서는 이러한 기능을 목록에 표시되지 않습니다,하지만 당신은'RegOpenKeyEx()를 호출 할 수있다','RegSetValueEx()'와'을 RegCloseKey()'를 수동으로 사용하여 [System.dll 플러그인] (http://nsis.sourceforge.net/Docs/AppendixD.html#useful_system_plugin). 또는 임시 * .reg * 파일을 준비하고 * regedit.exe *를 호출하여 가져올 수도 있습니다. –

답변

0

NSIS에 WriteRegMultiStr에 대한 기본 지원을 추가했지만 NSIS v3.02가 NSIS v3.02를 사용할 때까지 기다려야합니다. 당신이 할 수있는 말은 시간에

:

NSIS 버전 3.0 + :

!include Util.nsh 
!include LogicLib.nsh 
!macro RegMultiStr_Free list 
System::Free ${list} 
!macroend 
!macro RegMultiStr_Begin list new 
StrLen ${list} `${new}` 
System::Call '*(&t${list}s,&t1"",&t1"")p.s' `${new}` 
Pop ${list} 
!macroend 
!macro RegMultiStr_Append list new 
Push ${list} 
Push `${new}` 
!insertmacro CallArtificialFunction RegMultiStr_AppendImp 
Pop ${list} 
!macroend 
!macro RegMultiStr_AppendImp 
System::Store S 
Pop $2 ; New string 
Pop $1 ; List 
System::Call KERNEL32::GlobalSize(pr1)i.r3 ; $3 = TotSize 
StrLen $4 $2 
System::Call '*(&i$3,&t$4,&t1)p.r5' 
System::Copy $5 $1 
IntOp $3 $3 - ${NSIS_CHAR_SIZE} 
System::Call '*$5(&i$3,&t$4s,&t1"",&t1"")' $2 
!insertmacro RegMultiStr_Free $1 
Push $5 
System::Store L 
!macroend 
!macro RegMultiStr_Write hk subkey name list 
Push ${hk} 
Push `${subkey}` 
Push `${name}` 
Push ${list} 
!insertmacro CallArtificialFunction RegMultiStr_WriteImp 
!macroend 
!macro RegMultiStr_WriteImp 
System::Store S 
Pop $4 ; List 
Pop $3 ; Name 
Pop $2 ; SubKey 
Pop $1 ; Root HK 
System::Call 'ADVAPI32::RegCreateKey(ir1, tr2, *p0r5)i.r0' ; $5 = HKEY 
${If} $0 = 0 
    StrCpy $7 $4 ; list items pointer 
    loop: 
     System::Call KERNEL32::lstrlen(t)(pr7)i.r6 
     IntOp $0 $0 + ${NSIS_CHAR_SIZE} ; \0 
     ${IfThen} $6 = 0 ${|} Goto Write ${|} 
     !if "${NSIS_CHAR_SIZE}" > 1 
     IntOp $6 $6 * ${NSIS_CHAR_SIZE} 
     !endif 
     IntOp $0 $0 + $6 
     IntOp $6 $6 + ${NSIS_CHAR_SIZE} ; \0 
     ${IntPtrOp} $7 $7 + $6 
     Goto loop 
    write: 
     System::Call 'ADVAPI32::RegSetValueEx(pr5, tr3, i0, i7, pr4, ir0)i.r0' 
    System::Call 'ADVAPI32::RegCloseKey(pr5)' 
${EndIf} 
System::Store L 
!macroend 

!include WinCore.nsh 
Section 
!insertmacro RegMultiStr_Begin $0 "Foo" 
!insertmacro RegMultiStr_Append $0 "Bar" 
!insertmacro RegMultiStr_Write ${HKEY_CURRENT_USER} "Software\NSIS\Test" "MultiStrTest" $0 
!insertmacro RegMultiStr_Append $0 "B a z" 
!insertmacro RegMultiStr_Write ${HKEY_CURRENT_USER} "Software\NSIS\Test" "Test 2" $0 
!insertmacro RegMultiStr_Free $0 
SectionEnd