2016-12-28 3 views
2

で複数行文字列のレジストリ値を作成します。 ?が、文字列型のみのために、私はこのアプリケーションのレジストリエントリを作成することができ、私は自分のアプリケーションのためのパッケージを作成しようとしましたNSIS

+0

ドキュメントは、このような機能を一覧表示するには表示されませんが、あなたは '手動で使用して'のRegOpenKeyEx() '、' RegSetValueEx() 'と' RegCloseKey()を呼び出すことが[System.dll plugin](http://nsis.sourceforge.net/Docs/AppendixD.html#useful_system_plugin)を参照してください。または、一時的な* .reg *ファイルを準備し、* regedit.exe *を呼び出してインポートすることもできます。 –

答えて

1

Registry plug-inは、MULTI_SZなどのさまざまな種類のサポートがあります。

また、このexample scriptをSystemプラグインを使用して確認してください。

0

NSISへのWriteRegMultiStrの基本サポートを追加しましたが、NSIS v3.02がそれを使用するのを待たなければなりません。あなたができることを意味時間で

NSIS v3.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 
関連する問題

 関連する問題