nsis 脚本修改

先来看一下由HM NIS Edit生成的脚本:
; Script generated by the HM NIS Edit Script Wizard.

; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "My application"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "My company, Inc."
!define PRODUCT_WEB_SITE "http://www.mycompany.com"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\payload.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"

; MUI 1.67 compatible ------
!include "MUI.nsh"

; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"

; Language Selection Dialog Settings
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"

; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "许可协议.txt"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!insertmacro MUI_PAGE_FINISH

; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES

; Language files
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "SimpChinese"

; MUI end ------

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "d:\Setup.exe"
InstallDir "$PROGRAMFILES\My application"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show

Function .onInit
  !insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd

Section "MainSection" SEC01
  SetOutPath "$INSTDIR"
  SetOverwrite ifnewer
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\snapshot_blob.bin"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\resources.pak"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\payload.exe"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\package.json"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\nwjc.exe"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\nw_elf.dll"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\nw_200_percent.pak"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\nw_100_percent.pak"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\nw.exe"
  CreateDirectory "$SMPROGRAMS\My application"
  CreateShortCut "$SMPROGRAMS\My application\My application.lnk" "$INSTDIR\nw.exe"
  CreateShortCut "$DESKTOP\My application.lnk" "$INSTDIR\nw.exe"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\nw.dll"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\node.dll"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\natives_blob.bin"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\nacl_irt_x86_64.nexe"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\libGLESv2.dll"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\libEGL.dll"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\icudtl.dat"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\ffmpeg.dll"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\d3dcompiler_47.dll"
  SetOutPath "$INSTDIR\app"
  SetOverwrite try
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\index.html"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\main.js"
  SetOutPath "$INSTDIR\app\static"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\static\biankuang3.png"
  SetOutPath "$INSTDIR\app\static\css"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\static\css\app.b9ead1a4c3122fd4b387b320010926f0.css"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\static\css\app.b9ead1a4c3122fd4b387b320010926f0.css.map"
  SetOutPath "$INSTDIR\app\static\data"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\static\data\data-pie.xml"
  SetOutPath "$INSTDIR\app\static\images"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\static\images\anniu1.png"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\static\images\anniu2.png"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\static\images\bdr-blueSky.png"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\static\images\bdr.png"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\static\images\biankuang.png"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\static\images\biankuang3.png"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\static\images\biankuang4.png"
  File "D:\nwjs_workspace\electricity_visual_product\code\nwjs-sdk-v0.25.0-win-x64\app\static\images\bingzhuang.png"

.....

RMDir "$INSTDIR\locales"
  RMDir "$INSTDIR\app\static\styles"
  RMDir "$INSTDIR\app\static\script"
  RMDir "$INSTDIR\app\static\js"
  RMDir "$INSTDIR\app\static\img"
  RMDir "$INSTDIR\app\static\images\img\2"
  RMDir "$INSTDIR\app\static\images\img\1"
  RMDir "$INSTDIR\app\static\images"
  RMDir "$INSTDIR\app\static\data"
  RMDir "$INSTDIR\app\static\css"
  RMDir "$INSTDIR\app\static"
  RMDir "$INSTDIR\app"
  RMDir "$INSTDIR"

  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  SetAutoClose true
SectionEnd


这里中间部分略过了,都是一些添加文件。

主要是下面要进行环境变量的设置和图标刷新以及代码的执行权限的设置。
1、设置应该程序图标:
Section -AdditionalIcons
  SetOutPath $INSTDIR
  WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
  CreateShortCut "$SMPROGRAMS\diyscreen\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
  CreateShortCut "$SMPROGRAMS\diyscreen\Uninstall.lnk" "$INSTDIR\uninst.exe"
  CreateShortCut "$SMPROGRAMS\diyscreen\diyscreen.lnk" "$INSTDIR\nw.exe" "" "$INSTDIR\pkgtools\tool.ico"
  CreateShortCut "$DESKTOP\diyscreen.lnk" "$INSTDIR\nw.exe" "" "$INSTDIR\pkgtools\tool.ico"
  Exec "ie4uinit -show"
SectionEnd

2、环境变量设置及代码执行权限的设置
Section -Post
  AccessControl::ClearOnFile "$INSTDIR" "(S-1-1-0)" "FullAccess"
  WriteUninstaller "$INSTDIR\uninst.exe"
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\nw.exe"
  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\xcopy.exe"
  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}"
  WriteRegExpandStr HKCR ".vsz" "" "vszfile"
  WriteRegExpandStr HKCR "vszfile\DefaultIcon" "" "$INSTDIR\pkgtools\project.ico"
  WriteRegExpandStr HKCR "vszfile\shell\open\command" "" "$INSTDIR\nw.exe $\"%1$\""
  WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "diyscreen" "$INSTDIR"
  SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment"
  Exec "ie4uinit -show"
SectionEnd

说明:AccessControl::ClearOnFile "$INSTDIR" "(S-1-1-0)" "FullAccess",设置安装后的目录权限为everyone(读/写);

WriteRegExpandStr HKCR ".vsz" "" "vszfile"
  WriteRegExpandStr HKCR "vszfile\DefaultIcon" "" "$INSTDIR\pkgtools\project.ico"
  WriteRegExpandStr HKCR "vszfile\shell\open\command" "" "$INSTDIR\nw.exe $\"%1$\""
,.vsz为自定义扩展名文件,最后的"%1" 是启动vsz文件指定nw.exe 的参数,如果在桌面上双击一个.vsz的文件,在打开nw.exe后自动打开桌面上这个自定义vsz文件内容。$\"表是"的转义。

WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "diyscreen" "$INSTDIR"
,设置环境变量,用于程序中获取使用。

SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment"
刷新环境变量。

Exec "ie4uinit -show"
刷新自定义格式文件的图标,否则需要重启才会生效。

记得引入!include "winmessages.nsh",否则会报错。

以上列出的是需要手动修改的地方,其余的都是HM NIS Edit自动生成的。修改完成后ctrl+f9重新编译运行。

猜你喜欢

转载自451914442.iteye.com/blog/2394022