在windows平台下制作安装包的工具有很多,暂时介绍NSIS工具来制作安装包,我们可以在其官网下载打包的,对应NSIS打包工具的制作还有个HM NSIS Edit工具。

    NSIS环境配置

    • 下载NSIS的编译程序
      nsis3.01是最新版本,可以从官方下载

    或从csdn下载

    http://download.csdn.net/download/signjing/4461091

    • 下载NSIS的IDE
      NSIS开发环境在这里先只介绍HM NIS EDIT,初期的开发环境也将以HM NIS EDIT为主,HM NIS EDIT 2.0.3是最好的Nullsoft脚本安装系统(NSIS)开源脚本编辑器。

    nis edit 2.0.3是最新版,可以从官方下载

    或从csdn下载

    http://download.csdn.net/download/signjing/4461120

    • 编译环境
      可以依赖HM NIS EDIT来开发和编译脚本,也可以在控制台用makensis.exe来编译脚本,两种方式都可以,但是建议用NIS EDIT来开发和编译脚本。如果不需要开发,仅仅只是编译脚本就不需要安装NIS EDIT了,只需要在命令行下用makensis.exe来编译脚本。

    NSIS脚本制作

    • windows 7平台检测,因为electron只支持windows 7以上的平台,所以安装包脚本能够检测windows 7以下平台,则提示用户退出安装。
    1. ${nsProcess::KillProcess} "Titan.exe" $R2
    2. Sleep 2000
    3. ${If} ${AtLeastWin7}
    4. DetailPrint "OS版本为: windows 7+"
    5. ${Else}
    6. MessageBox MB_OK "本程序只能安装在 Windows 7 版本以上的操作系统!"
    7. Abort
    8. ${EndIf}
    9. FunctionEnd
    • 注册表里面写入安装目录
      因为在自动更新过程中需要用到被更新的程序所在的目录,所以在完整安装时就需要写入到注册表

    • 对程序目录进行压缩成安装包
      对文件夹所有文件进行压缩,同时创建快捷方式,其中参数${PRODUCT_DIR}为传入进来的electron文件夹的路径
    1. Section "MainSection" SEC01
    2. SetOutPath "$INSTDIR"
    3. SetOverwrite on
    4. File /r "${PRODUCT_DIR}\*.*"
    5. CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
    6. CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.exe"
    7. CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.exe"
    8. SectionEnd

    添加卸载快捷方式

    • 程序卸载
      删除文件夹下所有文件,同时删除快捷方式和注册表里面的信息。
    1. Section Uninstall
    2. SetShellVarContext current
    3. RMDir /r "$INSTDIR"
    4. Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
    5. Delete "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk"
    6. Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"
    7. Delete "$SMPROGRAMS\${PRODUCT_NAME}"
    8. RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"
    9. Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
    10. DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
    11. DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
    12. SetAutoClose true
    13. SetShellVarContext all
    14. RMDir /r "$INSTDIR"
    15. Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
    16. Delete "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk"
    17. Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"
    18. Delete "$SMPROGRAMS\${PRODUCT_NAME}"
    19. RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"
    20. Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
    21. DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
    22. DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
    23. SetAutoClose true
    24. SectionEnd

    最后用命令行来打包,下面是一条打包的测试命令:

    完整的安装包打包脚本示例:

    1. ; HM NIS Edit Wizard helper defines
    2. ;!define PRODUCT_VERSION "6.0"
    3. !define PRODUCT_PUBLISHER "erayt, Inc."
    4. !define PRODUCT_WEB_SITE "http://www.erayt.com"
    5. !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}.exe"
    6. !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
    7. !define PRODUCT_UNINST_ROOT_KEY "HKLM"
    8. ; MUI 1.67 compatible ------
    9. !include "MUI.nsh"
    10. !include "nsProcess.nsh"
    11. !include "WinVer.nsh"
    12. ; MUI Settings
    13. !define MUI_ABORTWARNING
    14. !define MUI_ICON "logo.ico"
    15. !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
    16. ; Welcome page
    17. !insertmacro MUI_PAGE_WELCOME
    18. ; License page
    19. ;!insertmacro MUI_PAGE_LICENSE "c:\path\to\licence\YourSoftwareLicence.txt"
    20. ; Directory page
    21. !insertmacro MUI_PAGE_DIRECTORY
    22. ; Instfiles page
    23. !insertmacro MUI_PAGE_INSTFILES
    24. ; Finish page
    25. !define MUI_FINISHPAGE_RUN "$INSTDIR\${PRODUCT_NAME}.exe"
    26. !insertmacro MUI_PAGE_FINISH
    27. ;!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
    28. ; Uninstaller pages
    29. !insertmacro MUI_UNPAGE_INSTFILES
    30. ; Language files
    31. !insertmacro MUI_LANGUAGE "English"
    32. ; MUI end ------
    33. Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
    34. OutFile "Setup.exe"
    35. InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
    36. InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
    37. ShowInstDetails show
    38. ShowUnInstDetails show
    39. Function .onInit
    40. ${nsProcess::KillProcess} "${PRODUCT_NAME}.exe" $R2
    41. Sleep 2000
    42. ${If} ${AtLeastWin7}
    43. DetailPrint "OS版本为: windows 7+"
    44. ${Else}
    45. MessageBox MB_OK "本程序只能安装在 Windows 7 版本以上的操作系统!"
    46. Abort
    47. ${EndIf}
    48. FunctionEnd
    49. Section "MainSection" SEC01
    50. SetOutPath "$INSTDIR"
    51. SetOverwrite on
    52. File /r "${PRODUCT_DIR}\*.*"
    53. CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
    54. CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.exe"
    55. SectionEnd
    56. Section -AdditionalIcons
    57. WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
    58. CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
    59. CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe"
    60. SectionEnd
    61. Section -Post
    62. WriteUninstaller "$INSTDIR\uninst.exe"
    63. WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Path" "$INSTDIR"
    64. WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\${PRODUCT_NAME}.exe"
    65. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
    66. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
    67. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_NAME}.exe"
    68. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
    69. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
    70. WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
    71. SectionEnd
    72. Function un.onUninstSuccess
    73. HideWindow
    74. MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从你的计算机移除。"
    75. FunctionEnd
    76. Function un.onInit
    77. MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,其及所有的组件?" IDYES +2
    78. Abort
    79. FunctionEnd
    80. Section Uninstall
    81. SetShellVarContext current
    82. RMDir /r "$INSTDIR"
    83. Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
    84. Delete "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk"
    85. Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"
    86. Delete "$SMPROGRAMS\${PRODUCT_NAME}"
    87. RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"
    88. Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
    89. DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
    90. DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
    91. SetAutoClose true
    92. SetShellVarContext all
    93. RMDir /r "$INSTDIR"
    94. Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
    95. Delete "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk"
    96. Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"
    97. Delete "$SMPROGRAMS\${PRODUCT_NAME}"
    98. RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"
    99. Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
    100. DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
    101. DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"