Hello i've write here my uninstaller section, but it seems that it's not working because it doesn't delete the directory neither the unistall program
Section "Uninstall"
Delete "$INSTDIR\Reports\Dba\*.*"
Delete "$INSTDIR\Reports\Objetos\*.*"
Delete "$INSTDIR\Reports\PLSQL\*.*"
Delete "$INSTDIR\Reports\Usuario\*.*"
Delete "$INSTDIR\Manual.pdf"
Delete "$INSTDIR\Manual.cnt"
Delete "$INSTDIR\Manual.hlp"
Delete "$INSTDIR\Manual.lang"
Delete "$INSTDIR\Manual.pdf"
Delete "$INSTDIR\Uninstall.exe"
Rmdir "$INSTDIR\Reports\Dba"
Rmdir "$INSTDIR\Reports\Objetos"
Rmdir "$INSTDIR\Reports\PLSQL"
Rmdir "$INSTDIR\Reports\Usuario"
Rmdir "$INSTDIR\Reports"
Rmdir "$INSTDIR"
SectionEnd
Can someone help me?
Unistaller code seems to not work
10 posts
No, that's just for sections beyond the first. If you only have one, the proper name is "Uninstall". See #4.6.2 in the manual.
As for getting the files deleted, you should (as said above) try using /REBOOTOK, in case some of the files are in use. Also be sure that your uninstaller is placed in the program directory, as that's where the uninstaller gets $INSTDIR from (also mentioned in #4.6.2). If it isn't, place it there or retrieve the value from somewhere, such as the registry.
As for getting the files deleted, you should (as said above) try using /REBOOTOK, in case some of the files are in use. Also be sure that your uninstaller is placed in the program directory, as that's where the uninstaller gets $INSTDIR from (also mentioned in #4.6.2). If it isn't, place it there or retrieve the value from somewhere, such as the registry.
I'll try to test it, thanks to all in anyway you
Greetings
Pedro Garcia Rodriguez
Greetings
Pedro Garcia Rodriguez
no work.what can i do the /rebootok don't delete the directory and don't delete the uninstall program
Just do:
Rmdir /rebootok /r "$INSTDIR"
/r == recursive, so it'll delete the directory and all files in it (if it isn't empty).
-Stu
Rmdir /rebootok /r "$INSTDIR"
/r == recursive, so it'll delete the directory and all files in it (if it isn't empty).
-Stu
I used the instdir in this way
c:\bla bla bla\ ble ble ble
THe installer delete the ble ble ble but no the bla bla directory
anyone knows why?
c:\bla bla bla\ ble ble ble
THe installer delete the ble ble ble but no the bla bla directory
anyone knows why?
RMDir only removes the topmost directory specified, in this case "ble ble ble", regardless whether or not you specify recursive deletion. If you want to delete "bla bla bla" as well, you need to find uot what "bla bla bla" is and delete it with an additional RMDir.
Being able to delete "bla bla bla" with RMDir "C:\bla bla bla\ble ble ble" would be very insecure, as you may end up deleting something important.
Being able to delete "bla bla bla" with RMDir "C:\bla bla bla\ble ble ble" would be very insecure, as you may end up deleting something important.
Ah right, this is a problem that has always existed.
I wrote this function quite a while ago which should work:
You pass it your $INSTDIR and then the number of parent folders to remove. It will remove the folders only if they are empty.
The top level folder ($INSTDIR) will be removed with /r switch so you do not need to use Rmdir /rebootok /r "$INSTDIR" anymore.
-Stu
I wrote this function quite a while ago which should work:
You pass it your $INSTDIR and then the number of parent folders to remove. It will remove the folders only if they are empty.
The top level folder ($INSTDIR) will be removed with /r switch so you do not need to use Rmdir /rebootok /r "$INSTDIR" anymore.
-Stu
I've tried including the code, but it just doesn't seem to work. The code included is as follows:
Function un.UninstallDirs
Exch $R0 ;input string
Exch
Exch $R1 ;maximum number of dirs to check for
Push $R2
Push $R3
Push $R4
Push $R5
IfFileExists "$R0\*.*" 0 +2
RMDir /r "$R0"
StrCpy $R5 0
top:
StrCpy $R2 0
StrLen $R4 $R0
loop:
IntOp $R2 $R2 + 1
StrCpy $R3 $R0 1 -$R2
StrCmp $R2 $R4 exit
StrCmp $R3 "\" 0 loop
StrCpy $R0 $R0 -$R2
IfFileExists "$R0\*.*" 0 +2
RMDir "$R0"
IntOp $R5 $R5 + 1
StrCmp $R5 $R1 exit
Goto top
exit:
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Pop $R1
Pop $R0
FunctionEnd
#location where code is called is elsewhere (uninstall section):
Section "Uninstall"
#Code clipped for brevity
RMDir /R "$INSTDIR"
Push 2
Push "$INSTDIR"
Call un.UninstallDirs
StrCpy $0 "%c"
CallInstDLL "$PLUGINSDIR\nsisdt.dll" currentdate
DetailPrint "Uninstallation finished $0."
Push "$TEMP\${PRODUCTNAME}-uninstall.log"
DetailPrint "Please wait while uninstaller finishes..."