创建卸载程序时出错

时间:2012-09-02 18:05:45

标签: nsis uninstaller

我使用NSIS和下面给出的代码创建了一个安装程序。安装程序已成功创建,但是当我在pc中安装程序时,卸载程序不会在第一次安装时创建,但是当我再次安装时,会成功创建卸载程序>我能做些什么来帮助... 我的nsi脚本:

# 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

1 个答案:

答案 0 :(得分:1)

在调用SetOutPath $INSTDIR之前加WriteUninstaller

您无法使用RequestExecutionLevel user然后安装到$ Programfiles / HKLM,您需要请求管理员权限:

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