这个NSIS脚本是打包公司的整个Release项目工程。

用NSIS编译器编译下就可以了。

; Script generated by the HM NIS Edit Script Wizard.
!include "StrFunc.nsh"
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "dlf_setup_v2.0"
!define PRODUCT_VERSION "2.0"
!define PRODUCT_PUBLISHER "DouBan Inc."
!define PRODUCT_WEB_SITE "http://wwwdouban.com"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\makensis.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define INSTALL_DIR_FILENAME "DouBan" ; MUI 1.67 compatible ------
!include "MUI.nsh"
!include "LogicLib.nsh"
!include "x64.nsh"
!include "EnvVarUpdate.nsh"
!include "WinVer.nsh" ; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\Wintech.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\Wintech.ico" ; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
;!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\License.txt"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
;!define MUI_FINISHPAGE_RUN "$INSTDIR\bin\wlp_exe_gui.exe"
;!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\readme.txt"
!insertmacro MUI_PAGE_FINISH ; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES ; Language files
!insertmacro MUI_LANGUAGE "English" !echo "Running${out_suffix}" ; MUI end ------ RequestExecutionLevel admin Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "dlf_setup_${out_suffix}.exe"
InstallDir "$PROGRAMFILES\${INSTALL_DIR_FILENAME}"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show Section "MainSection" SEC01 ${EnvVarUpdate} $0 "PATH" "A" "HKLM" "$INSTDIR\bin" ; appends to the system path
SetOutPath "$INSTDIR"
SetOverwrite ifnewer
File "${NSISDIR}\makensis.exe"
CreateDirectory "$INSTDIR"
;CreateShortCut "$SMPROGRAMS\${INSTALL_DIR_FILENAME}\${INSTALL_DIR_FILENAME}.lnk" "$INSTDIR\makensis.exe"
;CreateShortCut "$DESKTOP\${INSTALL_DIR_FILENAME}.lnk" "$INSTDIR\makensis.exe"
CreateShortCut "$DESKTOP\WinTech.lnk" "$INSTDIR\bin\wlp_exe_gui.exe" File "${NSISDIR}\License.txt"
File /r "setup\*"
File /r "DLP4100 FPGA Program file\*"
Var /GLOBAL WINDOWS_ARCHITECTURE
;这里用了GetVersion插件,但是该插件的作者已经停止维护了,
;但是不得已,需要使用,把GetVersion.dll放到了NSIS的插件目录下
GetVersion::WindowsPlatformArchitecture
Pop $WINDOWS_ARCHITECTURE ; 32 or 64 ; MessageBox MB_OK "${Version}"
; ${GetWindowsVersion} $R0 ${If} ${IsWinXP} ${If} "$WINDOWS_ARCHITECTURE" != "32"
MessageBox MB_OK "Sorry this application cannot run on this machine architecture!"
Quit ;结束整个安装进程
${EndIf}
${If} "${Version32}" != "X86"
MessageBox MB_OK "Sorry this application cannot run on this machine architecture!"
Quit ;结束整个安装进程
${EndIf}
${EndIf} ${If} ${IsWin7}
${If} "X$WINDOWS_ARCHITECTURE" != "${Version64}"
MessageBox MB_OK "Sorry this application cannot run on this machine architecture!"
Quit ;结束整个安装进程
${EndIf}
${EndIf} ${If} ${IsWin7} Exec '"$INSTDIR\bin\driver\win7\dpinst.exe" /c /f /se /sw /path "$INSTDIR\bin\driver\win7"'
ExecWait '"$INSTDIR\bin\vs2010sp1vcredist.exe" /q' ${EndIf} ;${If} ${IsWinXP} ;Exec '"$INSTDIR\bin\driver\win7\Psexec.exe" -i -d -s "$INSTDIR\bin\driver\win7\install_wdf_driver.exe"'
;ExecWait '"$INSTDIR\bin\vs2010sp1vcredist.exe" /q' ;${EndIf} ${If} ${IsWinXP} ExecWait '"$INSTDIR\bin\vs2010sp1vcredist.exe" /q' MessageBox MB_OK "You Must Install Driver manually! The Driver Installation Instruction is located in ReadMe.txt" ${EndIf} ExecShell open "$INSTDIR\" ;Detect windows is 32bit or 64bit ;${If} ${RunningX64}
; 64bit bits go here
; Exec '"$INSTDIR\bin\driver\win7\Psexec.exe" -i -d -s "$INSTDIR\bin\driver\win7\install_wdf_driver.exe"'
;-i -d -s "$INSTDIR\bin\Driver\win7install_wdf_driver.exe"' ; Exec "$INSTDIR\bin\driver\win7\install_wdf_driver.exe"
;ExecWait '"$INSTDIR\bin\vs2010sp1vcredist.exe" /q' ;${Else}
; 32bit bits go here
; Exec '"$INSTDIR\bin\driver\win7\Psexec.exe" -i -d -s "$INSTDIR\bin\driver\win7\install_wdf_driver.exe"'
; ExecWait '"$INSTDIR\bin\vs2010sp1vcredist.exe" /q'
;${EndIf} SectionEnd Section -AdditionalIcons
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateShortCut "$SMPROGRAMS\MyScript\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
CreateShortCut "$SMPROGRAMS\MyScript\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd Section -Post
WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\makensis.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\makensis.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}"
SectionEnd Function un.onUninstSuccess
HideWindow
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从你的计算机移除。"
FunctionEnd Function un.onInit
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,其及所有的组件?" IDYES +2
Abort
FunctionEnd Section Uninstall
Delete "$INSTDIR\${PRODUCT_NAME}.url"
Delete "$INSTDIR\uninst.exe"
Delete "$INSTDIR\setup"
Delete "$INSTDIR\License.txt"
Delete "$INSTDIR\makensis.exe" Delete "$SMPROGRAMS\${INSTALL_DIR_FILENAME}\Uninstall.lnk"
Delete "$SMPROGRAMS\${INSTALL_DIR_FILENAME}\Website.lnk"
Delete "$DESKTOP\${INSTALL_DIR_FILENAME}.lnk"
Delete "$SMPROGRAMS\${INSTALL_DIR_FILENAME}\${INSTALL_DIR_FILENAME}.lnk" RMDir "$SMPROGRAMS\${INSTALL_DIR_FILENAME}"
RMDir "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
SetAutoClose true
SectionEnd

  一些常用的NSIS代码

 ;获取操作系统盘符
ReadEnvStr $R0 SYSTEMDRIVE
;创建log文件夹
CreateDirectory "$R0\log"
;递归删除log文件夹
RMDir /r "$R0\log" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;弹出Windows关机框
FindWindow $0 "shell_traywnd"
SendMessage $0 273 506 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;请求Windows帮助
FindWindow $0 "shell_traywnd"
SendMessage $0 273 503 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;一句话刷新屏幕
System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;打开桌面属性
;...cpl,0,3'中的3可以改为
;-1 主题 0 壁纸 1 屏保 2 外观 3 设置
Exec 'Rundll32.exe shell32.dll,Control_RunDLL Desk.cpl,0,3' ;打开"设置" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;获得安装程序所在目录
System::Call 'kernel32::GetCurrentDirectory(i 1024,t .R1)'
MessageBox MB_OK '安装程序所在目录:$R1'
;或者直接使用变量
MessageBox MB_OK '文件名$EXEFILE,所在文件夹$EXEDIR,完整路径$EXEPATH。' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;获得当前安装程序进程PID
System::Call 'kernel32::GetCurrentProcessId()i .R0'
MessageBox MB_OK '安装程序进程PID:$R0' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;获得磁盘卷标
StrCpy $R0 "C:\"
System::Call 'kernel32::GetVolumeInformationA(t R0,t .R1,i 100,i .R3,i .R4,i .R5,t .R6,i 100)'
MessageBox MB_OK '盘符:$R0$\n卷标:$R1$\n文件格式:$R6' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;设置磁盘卷标
StrCpy $R0 "C:\" ;盘符
StrCpy $R1 "系统" ;卷标
System::Call 'kernel32::SetVolumeLabelA(t R0,t R1)' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;设置文件属性
StrCpy $R0 "C:\1.EXE" ;文件
StrCpy $R1 0x20 ;属性
System::Call 'kernel32::SetFileAttributesA(t R0,i 0x100)'
;属性表
;0x20 FILE_ATTRIBUTE_ARCHIVE,存档
;0x2 FILE_ATTRIBUTE_HIDDEN,隐藏
;0x80 FILE_ATTRIBUTE_NORMAL,正常
;0x2000 FILE_ATTRIBUTE_NOT_CONTENT_INDEXED,不索引
;0x1000 FILE_ATTRIBUTE_OFFLINE,离线
;0x1 FILE_ATTRIBUTE_READONLY,只读
;0x4 FILE_ATTRIBUTE_SYSTEM,系统
;0x100 FILE_ATTRIBUTE_TEMPORARY,;临时属性(一般无效) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;在WIN7任务栏中增加图标链接
SetOutPath $WINDIR
CreateShortcut "$DESKTOP\记事本.lnk" "$WINDIR\notepad.exe"
ExecShell taskbarpin "$DESKTOP\记事本.lnk" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;安装结束后调用HTTP下载插件下载文件并运行
Function .onGUIEnd
NSISdl::download "http://www.flighty.cn/服务器文件名.exe" "本地文件名.exe"
Pop $R0 ;获取返回值
StrCmp $R0 "success" +3
MessageBox MB_OK "下载失败,原因: $R0"
Quit
exec ""本地文件名.exe""
FunctionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;隐藏/显示文件扩展名实时生效,写入 0 (0x00000000) 显示或 1 (0x00000001) 来隐藏
WriteRegDWORD HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" "HideFileExt" 0x00000001
SendMessage ${HWND_BROADCAST} ${WM_SETTINGCHANGE} 0 "STR:ShellState"
System::Call "shell32::SHChangeNotify(i0x08000000,i0,i0,i0)" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OutFile "ScreenRes.exe"
Name "获取当前屏幕分辨率"
Caption "获取当前屏幕分辨率"
XPStyle "on" Function ".onInit"
System::Call 'user32::GetSystemMetrics(i 0) i .r0'
System::Call 'user32::GetSystemMetrics(i 1) i .r1'
MessageBox MB_OK|MB_ICONINFORMATION "当前屏幕分辨率为: $\r$\n$0 X $1"
Quit
FunctionEnd Section "轻狂志"
;您的其他代码
SectionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OutFile flighty.exe
Section "将轻狂志设为首页"
WriteRegStr HKCU "Software\Microsoft\Internet Explorer\Main" "Start Page" http://www.flighty.cn
SectionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;调用 Windows API 来获取运行时间
System::Alloc 16
System::Call kernel32::GetLocalTime(isR0)
System::Call *$R0(&i2.R1,&i2.R2,&i2.R3,&i2.R4,&i2.R5,&i2.R6,&i2.R7,&i2.R8)
System::Free $R0
MessageBox MB_OK "$R1年$R2月$R4日,星期$R3,$R5:$R6:$R7.$R8" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;使用MiscButtonText修改按钮文本
;分别对应[上一步]、[下一步]、[取消]、[关闭],如果留空参数,则使用默认值
MiscButtonText "" "" "" "完成(&G)"
;安装过程页面
!insertmacro MUI_PAGE_INSTFILES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;清除目录权限及设置目录权限
AccessControl::DisableFileInheritance "$INSTDIR" ;禁止继承
AccessControl::ClearOnFile "$INSTDIR" "(S-1-1-0)" "FullAccess" ;设置Everyone权限 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Name "获得CPU和BIOS信息"
OutFile "flighty.exe" Section
SectionEnd Function .onInit
ReadRegStr $0 HKLM "HARDWARE\DESCRIPTION\System\CentralProcessor\0" "VendorIdentifier"
ReadRegStr $1 HKLM "HARDWARE\DESCRIPTION\System\CentralProcessor\0" "ProcessorNameString"
ReadRegStr $2 HKLM "HARDWARE\DESCRIPTION\System\CentralProcessor\0" "Identifier"
ReadRegStr $3 HKLM "HARDWARE\DESCRIPTION\System\CentralProcessor\0" "~MHz" ReadRegStr $4 HKLM "HARDWARE\DESCRIPTION\System\BIOS" "BaseBoardManufacturer"
ReadRegStr $5 HKLM "HARDWARE\DESCRIPTION\System\BIOS" "BIOSVersion"
ReadRegStr $6 HKLM "HARDWARE\DESCRIPTION\System\BIOS" "BIOSReleaseDate"
MessageBox MB_OK|MB_ICONEXCLAMATION "CPU制造商$0 $\r$\nCPU型号$1 $\r$\nCPU标识$2 $\r$\nCPU主频$3 $\r$\n$\r$\n主板品牌$4 $\r$\n主板BIOS版本$5 $\r$\n主板BIOS日期$6"
Abort
FunctionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Name "判断操作系统位宽"
OutFile "判断操作系统位宽.exe"
!include "x64.nsh" Section
SectionEnd Function .onInit
${If} ${RunningX64}
MessageBox MB_OK ""
${Else}
MessageBox MB_OK ""
${EndIf}
FunctionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;在 hosts 文件中追加地址屏蔽脚本
ClearErrors
SetFileAttributes "$SYSDIR\drivers\etc\hosts" NORMAL ;去只读属性
FileOpen $9 $SYSDIR\drivers\etc\hosts a ;追加数据
;FileSeek $9 0 END ;指针定位到相对于文件结尾
FileWrite $9 "127.0.0.1 adcount.sandai.net $\r$\n"
FileWrite $9 "127.0.0.1 biz4.sandai.net $\r$\n"
;下面自己加
SetFileAttributes "$SYSDIR\drivers\etc\hosts" READONLY ;加只读属性
FileClose $9 ;关闭打开的文件 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;对比两个文件的时间,如两个时间相等,就返回0;如R0小于R1,返回-1;如R1小于R0,返回1
StrCpy $R0 "C:\boot.ini"
StrCpy $R1 "C:\AUTOEXEC.BAT"
System::Call 'kernel32::CompareFileTime(t R0,t R1) i.R2'
MessageBox MB_OK '文件$R0与$R1时间比较结果$R2' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;注册apache服务器, -n MyWebServer表示apache2注册服务名为MyWebServer,默认服务名为Apache2
nsExec::ExecToLog 'cmd.exe /c "$INSTDIR/apache2/bin/httpd.exe" -k install -n MyWebServer' ;注册MySQL服务器, MyDBServer表示MySQL注册服务名为MyDBServer,默认服务名为MySQL
nsExec::ExecToLog 'cmd.exe /c "$INSTDIR/mysql5/bin/mysqld-nt.exe" -install MyDBServer' ;启动apache服务和MySQL服务
nsExec::ExecToLog 'cmd.exe /c "$INSTDIR/apache2/bin/httpd.exe" -k start -n MyWebServer'
;或者
nsExec::ExecToLog 'cmd.exe /c net start MyWebServer'
nsExec::ExecToLog 'cmd.exe /c net start MyDBServer' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;从注册表中读取操作系统语言
ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\Control\Nls\Language" "Default"
${If} $0 = 0804
MessageBox MB_OK "您的操作系统语言为简体中文。"
${ElseIf} $0 == 0404
MessageBox MB_OK "您的操作系统语言为繁体中文。"
${ElseIf} $0 == 0409
MessageBox MB_OK "您的操作系统语言为英文。"
${EndIf}

reference:

http://www.flighty.cn/plus/view.php?aid=156

最新文章

  1. margin折叠-从子元素margin-top影响父元素引出的问题
  2. 实时跟踪log变化的工具Apachetop
  3. Redis主从复制深入剖析
  4. mysql生成varchar类型主键排序
  5. DevExpress GridView 自定义搜索按钮改为中文内容
  6. VS2010调试入门指南
  7. Mac下Sublime Text Vim模式 方向键无法长按
  8. mac和windows系统下 eclipse svn 设置代理服务器
  9. 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10(转载)
  10. 你懂AI吗(1)
  11. golang 调用windows API 中文的处理
  12. java基础-容器-Set
  13. JavaSE-类
  14. c# 线程锁 ,
  15. 图解JAVA参数传递
  16. javascript ----> Immediately-Invoked Function Expression (IIFE)(翻译)
  17. laravel框架5.2版本组件包开发
  18. 在UnrealEngine4中使用Google Protobuf
  19. Codeforces Round #264 (Div. 2) E. Caisa and Tree 树上操作暴力
  20. jquery实现返回页面顶部功能。

热门文章

  1. 自写 jQuery 大幅弹窗广告插件(不喜勿拍)
  2. HDOJ 1197 Specialized Four-Digit Numbers
  3. linux串口驱动分析——发送数据
  4. tomcat+redis实现session共享缓存
  5. iTunes备份文件路径
  6. C语言排序算法复习
  7. swift 中String常用操作
  8. Protobuf实现Android Socket通讯开发教程
  9. Java基础知识强化58:经典排序之二叉树排序(BinaryTreeSort)
  10. Python学习--07迭代器、生成器