에 다중 문자열 레지스트리 값을 생성 ?하지만 문자열 유형, 나는이 응용 프로그램에 대한 레지스트리 항목을 만들 수 있습니다, 내 응용 프로그램 패키지를 만들려고 NSIS
2
A
답변
1
Registry plug-in은 MULTI_SZ를 비롯한 다양한 유형을 지원합니다.
또는 example script을 시스템 플러그인을 사용하여 살펴보십시오.
0
NSIS에 WriteRegMultiStr에 대한 기본 지원을 추가했지만 NSIS v3.02가 NSIS v3.02를 사용할 때까지 기다려야합니다. 당신이 할 수있는 말은 시간에
:
가 Registry plug-in를 사용하여 플러그
이
ExecWait
를 사용하여 시스템에 nsExec 또는
Regedit.exe /S file.reg
와 Reg.exe와 실행 idleberg에 의해 제안 (내 코드 this from the Wiki)
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
이 문서는 이러한 기능을 목록에 표시되지 않습니다,하지만 당신은'RegOpenKeyEx()를 호출 할 수있다','RegSetValueEx()'와'을 RegCloseKey()'를 수동으로 사용하여 [System.dll 플러그인] (http://nsis.sourceforge.net/Docs/AppendixD.html#useful_system_plugin). 또는 임시 * .reg * 파일을 준비하고 * regedit.exe *를 호출하여 가져올 수도 있습니다. –