【问题标题】:Error in creating uninstaller创建卸载程序时出错
【发布时间】:2012-08-27 15:15:08
【问题描述】:

我使用 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

【问题讨论】:

    标签: nsis uninstallation


    【解决方案1】:

    在调用 WriteUninstaller 之前添加 SetOutPath $INSTDIR

    你不能使用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
    

    【讨论】:

    • 您回答的第一行解决了我的问题。我不知道您为什么要发布有关 RequestExecutionLevel 用户的其余内容,而这些内容与我的问题有什么关系..???无论如何谢谢你的建议
    • Anders 正在谈论“InstallDir $PROGRAMFILES\NepHotel”:这可能会导致错误,因为用户无法写入此目录 - 需要管理员权限,因此他建议您进行简单的管理员权限检查。跨度>
    猜你喜欢
    • 2017-08-09
    • 2014-03-29
    • 2012-05-29
    • 2011-01-04
    • 2015-08-31
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    相关资源
    最近更新 更多