nsis製做exe安裝程序

現實狀況

咱們基於nwjs的window平臺開發了一個app, 但nwjs的殼是一個綠色免安裝程序,並且文件N多,從產品和使用者的角度出發這樣的產品形態不知足要求,須要把綠色免安裝程序製做成標準的可安裝的exe程序app

實現步驟

1. 找一個現成的打包工具,如nsis
   2. 實現桌面快捷方式,開始菜單快捷方式,卸載快捷方式
   3. 把程序信息寫入註冊表(坑:程序的請求權限必須設置爲admin)

安裝nsis

使用版本nsis-3.0-setup.exe, 官網能夠下載工具

腳本

;NSIS Modern User Interface
;WorkPlus Setup Script
Unicode true

;--------------------------------
;Include Modern UI

  !include "MUI2.nsh"

;--------------------------------
;General

  ;應用名稱
  Name "WorkPlus"
  ;輸出名稱
  OutFile "workplus-setup.exe"

  ;設置默認安裝路徑
  InstallDir "$PROGRAMFILES\workplus"
  
  ;從註冊表檢取上次安裝路徑
  InstallDirRegKey HKCU "Software\workplus" ""

  ;Windows Vista系統爲應用程序請求權限
  RequestExecutionLevel admin

;--------------------------------
;Interface Settings

  ;在安裝過程當中按"取消"的話,彈出是否終止安裝的確認窗口
  !define MUI_ABORTWARNING

;--------------------------------
;Pages

  ;!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
  ;!insertmacro MUI_PAGE_COMPONENTS
  !insertmacro MUI_PAGE_DIRECTORY
  !insertmacro MUI_PAGE_INSTFILES
  
  !insertmacro MUI_UNPAGE_CONFIRM
  !insertmacro MUI_UNPAGE_INSTFILES
  
;--------------------------------
;Languages
 
  !insertmacro MUI_LANGUAGE "SimpChinese"

LoadLanguageFile "${NSISDIR}\Contrib\Language files\TradChinese.nlf"
;--------------------------------
;Version Information

  VIProductVersion "1.0.0.0"
  ;產品名稱
  VIAddVersionKey /LANG=${LANG_SimpChinese} "ProductName" "WorkPlus"
  ;備註
  VIAddVersionKey /LANG=${LANG_SimpChinese} "Comments" "WorkPlus"
  ;公司
  VIAddVersionKey /LANG=${LANG_SimpChinese} "CompanyName" "Foreverht Company"
  ;合法商標
  VIAddVersionKey /LANG=${LANG_SimpChinese} "LegalTrademarks" "WorkPlus"
  ;版權
  VIAddVersionKey /LANG=${LANG_SimpChinese} "LegalCopyright" "Copyright Foreverht Company"
  ;描述
  VIAddVersionKey /LANG=${LANG_SimpChinese} "FileDescription" "WorkPlus Application"
  ;文件版本號
  VIAddVersionKey /LANG=${LANG_SimpChinese} "FileVersion" "1.0.0"

;--------------------------------
;Installer Sections

Section ""

  ;將輸出路徑設置爲安裝目錄
  SetOutPath "$INSTDIR"
  
  ;ADD YOUR OWN FILES HERE...
  File /r "workplus"

  ;建立桌面快捷方式
  CreateShortCut "$DESKTOP\WorkPlus.lnk" "$INSTDIR\workplus\WorkPlus.exe" "" "$INSTDIR\workplus\WorkPlus.exe" 0

  ;建立開始菜單快捷方式
  CreateDirectory "$SMPROGRAMS\WorkPlus"
  CreateShortcut "$SMPROGRAMS\WorkPlus\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
  CreateShortcut "$SMPROGRAMS\WorkPlus\WorkPlus.lnk" "$INSTDIR\workplus\WorkPlus.exe" "" "$INSTDIR\workplus\WorkPlus.exe" 0
  
  ;向註冊表寫入安裝路徑
  WriteRegStr HKCU "Software\workplus" "" $INSTDIR
  WriteRegStr HKCU "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\workplus\WorkPlus.exe" "RUNASADMIN"

  ;向註冊表寫入卸載信息
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\workplus" "DisplayName" "WorkPlus"
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\workplus" "UninstallString" '"$INSTDIR\uninstall.exe"'
  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\workplus" "NoModify" 1
  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\workplus" "NoRepair" 1
  
  ;建立卸載程序
  WriteUninstaller "$INSTDIR\Uninstall.exe"

SectionEnd

;--------------------------------
;Uninstaller Section

Section "Uninstall"

  ;ADD YOUR OWN FILES HERE...
  RMDir /r "$INSTDIR\workplus"

  ;刪除卸載程序
  Delete "$INSTDIR\Uninstall.exe"

  ;刪除桌面快捷方式
  Delete "$DESKTOP\WorkPlus.lnk"

  ;刪除開始菜單目錄
  Delete "$SMPROGRAMS\workplus\*.*"
  RMDir "$SMPROGRAMS\workplus"
  ;刪除安裝目錄
  RMDir "$INSTDIR"

  ;刪除註冊表鍵
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\workplus"
  DeleteRegKey /ifempty HKCU "Software\workplus"

SectionEnd

製做

右鍵選中nsis的腳本,點擊Compile NSIS Script, 以下圖所示
clipboard.pngspa

遇到的問題

程序默認的安裝路徑是C:Program Files (x86)workplus, window下若有要往Program Files目錄寫文件進去是須要管理員權限的,若是不安裝在這個目錄下是沒有權限問題的code

;Windows Vista系統爲應用程序請求權限
RequestExecutionLevel none|user|highest|admin, 使用admin權限orm

執行後程序不能寫入文件,仍是權限的問題,若是你右鍵以管理員身份運行是ok的,若是你的程序不是安裝在C盤的Program Files (x86)目錄下是沒有權限問題的blog

網上找資料說能夠在註冊表裏聲明exe以管理員身份運行
WriteRegStr HKCU "SoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers"
"$INSTDIRworkplusWorkPlus.exe" "RUNASADMIN"ip

相關文章
相關標籤/搜索