2

现实情况

我们基于nwjs的window平台开发了一个app, 但nwjs的壳是一个绿色免安装程序,而且文件N多,从产品和使用者的角度出发这样的产品形态不满足要求,需要把绿色免安装程序制作成标准的可安装的exe程序

实现步骤

   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.png

遇到的问题

程序默认的安装路径是C:Program Files (x86)workplus, window下如有要往Program Files目录写文件进去是需要管理员权限的,如果不安装在这个目录下是没有权限问题的

;Windows Vista系统为应用程序请求权限
RequestExecutionLevel none|user|highest|admin, 使用admin权限

执行后程序不能写入文件,还是权限的问题,如果你右键以管理员身份运行是ok的,如果你的程序不是安装在C盘的Program Files (x86)目录下是没有权限问题的

网上找资料说可以在注册表里声明exe以管理员身份运行
WriteRegStr HKCU "SoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers"
"$INSTDIRworkplusWorkPlus.exe" "RUNASADMIN"


xiaokaceng
74 声望6 粉丝

引用和评论

1 篇内容引用
0 条评论