现实情况
我们基于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, 如下图所示
遇到的问题
程序默认的安装路径是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"
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。