Search code examples
nsisuninstallation

Error in creating uninstaller


I create an installer using NSIS and the code given below. The installer is created successfully created but when i install the program in pc uninstaller is not created during first insatllation but when i install it again, Uninstaller is created successfully> What can i do plz help... My nsi script:

# declare name of installer file

!define PRODUCT_NAME "NepHotel"

Name "NepHotel"
outfile "NepHotel_setup.exe"
InstallDir $PROGRAMFILES\NepHotel


RequestExecutionLevel user

Page directory
Page instfiles

# open section
section ""


CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.exe" ""

;create start-menu items
CreateDirectory "$SMPROGRAMS\NepHotel"
CreateShortCut "$SMPROGRAMS\NepHotel\${PRODUCT_NAME}.lnk"          "$INSTDIR\${PRODUCT_NAME}.exe" "" "$INSTDIR\${PRODUCT_NAME}.exe" 0
CreateShortCut "$SMPROGRAMS\NepHotel\Readme.lnk" "$INSTDIR\user.props" "" "$INSTDIR\user.props" 0
CreateShortCut "$SMPROGRAMS\NepHotel\uninstall.lnk" "$INSTDIR\uninstall.exe" 1


;write uninstall information to the registry
 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NepHotel" \
             "DisplayName" "${PRODUCT_NAME}"
 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NepHotel" \
             "UninstallString" "$\"$INSTDIR\Uninstall.exe$\""


  WriteUninstaller "$INSTDIR\Uninstall.exe"



SetOutPath $INSTDIR
File NepHotel.exe
File user.props


# end the section
sectionEnd


;Uninstaller Section  
Section "Uninstall"

;Delete Files 
  RMDir /r "$INSTDIR\*.*"    

;Remove the installation directory
  RMDir "$INSTDIR"

;Delete Start Menu Shortcuts
  Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
  Delete "$SMPROGRAMS\${PRODUCT_NAME}\*.*"
  RmDir  "$SMPROGRAMS\${PRODUCT_NAME}"

;Delete Uninstaller And Unistall Registry Entries
 enter code here DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\${PRODUCT_NAME}"
  DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall    \${PRODUCT_NAME}"  

SectionEnd

Function .onInstSuccess
  MessageBox MB_OK "You have successfully installed ${PRODUCT_NAME}. Use the desktop icon to     start the program."
FunctionEnd

Solution

  • Put SetOutPath $INSTDIR before the call to WriteUninstaller.

    You cannot use RequestExecutionLevel user and then install to $Programfiles/HKLM, you need to request administrator rights:

    Outfile RequireAdmin.exe
    
    ; BEGIN 8< 8< 8< 8< 8< 8< 8< 8<
    
    RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on)
    
    !include LogicLib.nsh
    
    Function .onInit
    UserInfo::GetAccountType
    pop $0
    ${If} $0 != "admin" ;Require admin rights on NT4+
        MessageBox mb_iconstop "Administrator rights required!"
        SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
        Quit
    ${EndIf}
    FunctionEnd
    
    ; END >8 >8 >8 >8 >8 >8 >8 >8
    
    Page InstFiles
    
    Section
    SectionEnd