Old 20th September 2005, 08:54   #1
xxx9527
Junior Member
 
Join Date: Sep 2005
Posts: 1
some questions

1.about the register codes
in installation section, i use lots of WriteRegValue, the problem is how can i write the unstallation section.

WriteRegValue needs 4 parameters, but DeleteRegValue only needs 3 parameters, so its not easy to edit just by replace strings.

2.a complile error, and i dont know how to correct it
Quote:
;Replace strings in files
;funtion from WIKI
Function AdvReplaceInFile
Exch $0 ;file to replace in
Exch
Exch $1 ;number to replace after
Exch
Exch 2
Exch $2 ;replace and onwards
Exch 2
Exch 3
Exch $3 ;replace with
Exch 3
Exch 4
Exch $4 ;to replace
Exch 4
Push $5 ;minus count
Push $6 ;universal
Push $7 ;end string
Push $8 ;left string
Push $9 ;right string
Push $R0 ;file1
Push $R1 ;file2
Push $R2 ;read
Push $R3 ;universal
Push $R4 ;count (onwards)
Push $R5 ;count (after)
Push $R6 ;temp file name

GetTempFileName $R6
FileOpen $R1 $0 r ;file to search in
FileOpen $R0 $R6 w ;temp file
StrLen $R3 $4
StrCpy $R4 -1
StrCpy $R5 -1

loop_read:
ClearErrors
FileRead $R1 $R2 ;read line
IfErrors exit

StrCpy $5 0
StrCpy $7 $R2

loop_filter:
IntOp $5 $5 - 1
StrCpy $6 $7 $R3 $5 ;search
StrCmp $6 "" file_write2
StrCmp $6 $4 0 loop_filter

StrCpy $8 $7 $5 ;left part
IntOp $6 $5 + $R3
IntCmp $6 0 is0 not0
is0:
StrCpy $9 ""
Goto done
not0:
StrCpy $9 $7 "" $6 ;right part
done:
StrCpy $7 $8$3$9 ;re-join

IntOp $R4 $R4 + 1
StrCmp $2 all file_write1
StrCmp $R4 $2 0 file_write2
IntOp $R4 $R4 - 1

IntOp $R5 $R5 + 1
StrCmp $1 all file_write1
StrCmp $R5 $1 0 file_write1
IntOp $R5 $R5 - 1
Goto file_write2

file_write1:
FileWrite $R0 $7 ;write modified line
Goto loop_read

file_write2:
FileWrite $R0 $R2 ;write unmodified line
Goto loop_read

exit:
FileClose $R0
FileClose $R1

SetDetailsPrint none
Delete $0
Rename $R6 $0
Delete $R6
SetDetailsPrint both

Pop $R6
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Pop $R1
Pop $R0
Pop $9
Pop $8
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
FunctionEnd

!macro ReplaceStr str1 str2 filename
DetailPrint "Replacing ${filename}"
Push "${str1}" ;text to be replaced
Push "${str2}" ;replace with
Push all ;replace all occurrences
Push all ;replace all occurrences
Push "${filename}" ;file to replace in
Call AdvReplaceInFile
!macroend
when i use like this:
!insertmacro ReplaceStr 'HKCU,"Keyboard Layout\Preload","4",0x00000002,"E0030804"' "" $INSTDIR\i386\hivedef.inf

it says "ReplaceStr" requires 3 parameters, passed 4!
maybe its because the string 'HKCU,"Keyboard Layout\Preload","4",0x00000002,"E0030804"' contains quotation marks(when i use !insertmacro ReplaceStr "abc" "" $INSTDIR\i386\hivedef.inf, it works)

so how do i correct it? Many thanks

Last edited by xxx9527; 20th September 2005 at 11:22.
xxx9527 is offline   Reply With Quote
Old 15th October 2005, 13:47   #2
kichik
M.I.A.
[NSIS Dev, Mod]
 
kichik's Avatar
 
Join Date: Oct 2001
Location: Israel
Posts: 11,343
  1. There's no need to delete each value separately. You can delete the entire uninstall key with DeleteRegKey.
  2. The code seems fine. Can you attach a complete example? The error must originate from another part of the code. It might be the first push line in the macro. Try replacing it with:
    code:
    Push `${str1}`

NSIS FAQ | NSIS Home Page | Donate $
"I hear and I forget. I see and I remember. I do and I understand." -- Confucius
kichik is offline   Reply With Quote
Reply
Go Back   Winamp & Shoutcast Forums > Developer Center > NSIS Discussion

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump