NSIS打包程序時卸載不淨問題

在用NISEDIT打安裝包後遇到三個問題

1、在重新包裝時,程序路徑會出現問題,會指向子文件夾中,程序就公出錯。而且多次重複包裝後文件路徑會變長

原因:研究代碼,發現是安裝時寫入的註冊表中的程序路徑不對

解決:改爲正確的路徑

Section -Post
  WriteUninstaller "$INSTDIR\uninst.exe"
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\frogTunnel.exe"   //此爲改正後的代碼,原先是指向了$INSTDIR的子目錄中,所以當重複安裝時路徑會出錯
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\frogTunnel.exe" //此爲改正後的代碼,原先是指向了$INSTDIR的子目錄中,所以當重複安裝時路徑會出錯
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd


2、在程序卸載後,有部分文件沒有刪除掉。

原因:有的文件夾沒有寫入到移除過程中

  RMDir "$INSTDIR\Adobe AIR\Versions\1.0"
  RMDir "$INSTDIR\Adobe AIR"

如上Versions文件夾沒有移除

解決:在兩句中間加入移除Versions語句

RMDir "$INSTDIR\Adobe AIR\Versions\1.0"
  RMDir "$INSTDIR\Adobe AIR\Versions"
  RMDir "$INSTDIR\Adobe AIR"


3、同樣是卸載後,開始 的快捷方式沒有刪除

原因:可能和用戶權限有關係,具體沒有深究

解決:

(1)加入admin權限 RequestExecutionLevel admin

ShowInstDetails show
ShowUnInstDetails show
RequestExecutionLevel admin #NOTE: You still need to check user rights with UserInfo!


Section "MainSection" SEC01

(2)在創建開始菜單和卸載時加入SetShellVarContext all


  //創建開始菜單

  SetShellVarContext all
  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
  CreateDirectory "$SMPROGRAMS\$ICONS_GROUP"
  CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\鐵路隧道限界.lnk" "$INSTDIR\frogTunnel.exe"
  CreateShortCut "$DESKTOP\鐵路隧道限界.lnk" "$INSTDIR\frogTunnel.exe"

 //卸載

 Section Uninstall
     SetShellVarContext all

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章