脚本:通用PE工具箱1.1

优质
小牛编辑
114浏览
2023-12-01
下载地址和介绍在这里:
http://www.ton6.cn/viewthread.php?tid=409extra=page%3D1

引用脚本的内容:

; 该脚本使用 HM VNISEdit 脚本编辑器向导产生

!include "LogicLib.nsh"

; 安装程序初始定义常量
!define PRODUCT_NAME "通用 PE 工具箱"
!define PRODUCT_VERSION "1.1"
!define PRODUCT_PUBLISHER "通用论坛"
!define PRODUCT_WEB_SITE "http://bbs.ton6.cn"
!define PRODUCT_UNINST_KEY "Software\MicR0soft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_R0OT_KEY "HKLM"

SetCompressor lzma

; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
!include "MUI.nsh"

; MUI 预定义常量
!define MUI_ABORTWARNING
!define MUI_ICON "E:\program Files\VIT\图标\msWGA.ICO"
!define MUI_WELCOMEFINISHPAGE_BITMAP "C:\program Files\NSIS\Contrib\Graphics\Wizard\orange.bmp"
!define MUI_WELCOMEPAGE_TEXT "  通用 PE 工具箱是一款安装在硬盘使用的Windows PE工具集合,我们可以用它来实现系统的维护,我们可以使用它来修改密码,备份还原系统等。它运行快速,界面简洁,并且可以高度自定义。作为一个应急维护工具箱,我们相信它是您最好的选择!\r\n\r\n    欢迎访问官方论坛,下载工具插件,获取更多信息!官方论坛:bbs.ton6.cn 通用论坛。\r\n\r\n  作者:李培聪 (Uepon)\r\n\r\n  $_CLICK"
!define MUI_WELCOMEPAGE_TITLE "\r\n    欢迎使用 通用 PE 工具箱!"
!define MUI_unICON "E:\program Files\VIT\图标\msWGA.ICO"
; 欢迎页面
!insertmacro MUI_PAGE_WELCOME
; 安装过程页面
!insertmacro MUI_PAGE_INSTFILES
; 安装完成页面

;!insertmacro MUI_PAGE_FINISH

; 安装卸载过程页面
!insertmacro MUI_UNPAGE_INSTFILES
; 安装界面包含的语言设置
!insertmacro MUI_LANGUAGE "SimpChinese"

; 安装预释放文件
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; ------ MUI 现代界面定义结束 ------


Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Setup.exe"
ShowUnInstDetails show
ShowInstDetails show
BrandingText "作者:李培聪 (Uepon)"

;定义sysdrive变量
Var  sysdrive

;下面为判断系统版本并复制必要文件的部分
;首先判断系统是9X还是NT,若为9X,则提示退出
;若为NT则继续判断具体的系统,若为2003,则不复制NTLDR,
;XP、2000则复制
section "WindowsVersion"

   ;判断是9X还是NT
   ClearErrors
   ReadRegStr $R0 HKLM \
   "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
   IfErrors 0 IS_winnt

   ;是9X
   DetailPrint "系统检测到你的系统是 9X 平台"
   MessageBox   MB_ICONSTOP   "本工具暂时不能在你的系统里安装使用,请先退出!"
   Quit

   ;是NT
   IS_winnt:
   DetailPrint "系统检测到你的操作系统是 NT 平台,程序继续运行"
   StrCpy $R1 $R0 1
   StrCmp $R1 '3' lbl_winnt_x
   StrCmp $R1 '4' lbl_winnt_x
   StrCpy $R1 $R0 3
   StrCmp $R1 '5.0' lbl_winnt_2000
   StrCmp $R1 '5.1' lbl_winnt_XP
   StrCmp $R1 '5.2' lbl_winnt_2003

   lbl_winnt_x:
     StrCpy $R0 "NT $R0" 6
   DetailPrint "你的操作系统为 Windows $R0 需要修补NTLDR引导文件"
   Goto lbl_do

   lbl_winnt_2000:
     Strcpy $R0 '2000'
   DetailPrint "你的操作系统为 Windows $R0 需要修补NTLDR引导文件"
   Goto lbl_do

   lbl_winnt_XP:
     Strcpy $R0 'XP'
   DetailPrint "你的操作系统为 Windows $R0 需要修补NTLDR引导文件"
   Goto lbl_do

   lbl_winnt_2003:
     Strcpy $R0 '2003'
   DetailPrint "你的操作系统为 Windows $R0 不需要修补NTLDR引导文件"
   Goto lbl_no

   lbl_do:
   DetailPrint "正在修补NTLDR引导文件"
   ReadEnvStr $sysdrive "SYSTEMDRIVE"
   SetOutPath "$sysdrive"
   SetOverwrite on
   File /r "D:\nt\*.*"
   SetFileAttributes "$sysdrive\NTDETECT.COM" HIDDEN|READONLY|system|ARCHIVE
   SetFileAttributes "$sysdrive\ntldr" HIDDEN|READONLY|system|ARCHIVE
   
   lbl_no:
sectionend

;下面为复制PE文件、引导、外置程序的部分
Section "Copyfile" SEC01

  ;读取%systemdrive%
  ReadEnvStr $sysdrive "SYSTEMDRIVE"
  SetOutPath "$sysdrive"
  SetOverwrite ifdiff
  File /r "D:\New Folder\*.*"
  IfFileExists "$sysdrive\BOOTFONT.BIN"  fontOK
  DetailPrint "你的操作系统为英文操作系统需要加入语言文件"
  File "D:\BOOTFONT.BIN"
  SetFileAttributes "$sysdrive\BOOTFONT.BIN" HIDDEN|READONLY|system|ARCHIVE
  fontOK:
SectionEnd

;下面是对PEPE文件、引导、外置程序设置的部分
Section "SetFile"

  ;读取%systemdrive%
  ReadEnvStr $sysdrive "SYSTEMDRIVE"
  
  ;添加引导。设置BOOT属性为隐藏、只读、系统。把等待时间改为4
  SetFileAttributes "$sysdrive\BOOT.INI" NORMAL
  SetFileAttributes "$sysdrive\BOOT.INI" ARCHIVE 
  WriteINIStr "$sysdrive\BOOT.INI" "operating systems" "$sysdrive\PELOAD" "通用 PE 工具箱"
  WriteINIStr "$sysdrive\BOOT.INI" "boot loader""timeout""4"
  
  ;将PE文件设置为隐藏、只读、系统
  SetFileAttributes "$sysdrive\BOOT.INI" HIDDEN|READONLY|system|ARCHIVE 
  SetFileAttributes "$sysdrive\LDRXPE" HIDDEN|READONLY|system|ARCHIVE
  SetFileAttributes "$sysdrive\PELOAD" HIDDEN|READONLY|system|ARCHIVE
  SetFileAttributes "$sysdrive\WINNT.XPE" HIDDEN|READONLY|system|ARCHIVE
  SetFileAttributes "$sysdrive\WINPE.IMG" HIDDEN|READONLY|system|ARCHIVE
SectionEnd

;创建快捷方式的部分
Section -AdditionalIcons
  SetOutPath "$WINDIR\"
  WriteIniStr "$WINDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
  CreateDirectory "$SMPROGRAMS\通用 PE 工具箱"
  CreateShortCut "$SMPROGRAMS\通用 PE 工具箱\访问通用论坛.lnk" "$WINDIR\${PRODUCT_NAME}.url"
  CreateShortCut "$SMPROGRAMS\通用 PE 工具箱\卸载.lnk" "$WINDIR\uninst.exe"
SectionEnd

;添加卸载注册表的部分
Section -Post
  WriteUninstaller "$WINDIR\uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_R0OT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  WriteRegStr ${PRODUCT_UNINST_R0OT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$WINDIR\uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_R0OT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_R0OT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  WriteRegStr ${PRODUCT_UNINST_R0OT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd


/******************************
------------------------------
以下是安装程序的卸载部分
------------------------------
******************************/

Section Uninstall

  ;读取%systemdrive%
  ReadEnvStr $sysdrive "SYSTEMDRIVE"
  
  ;删除文件
  Delete "$WINDIR\${PRODUCT_NAME}.url"
  Delete "$WINDIR\uninst.exe"
  Delete "$sysdrive\LDRXPE"
  Delete "$sysdrive\PELOAD"
  Delete "$sysdrive\WINNT.XPE"
  Delete "$sysdrive\WINPE.IMG"
  RMDir /r "$sysdrive\PE工具箱"
  
  ;删除引导、设置BOOT属性为隐藏,只读,系统
  SetFileAttributes "$sysdrive\BOOT.INI" NORMAL
  SetFileAttributes "$sysdrive\BOOT.INI" ARCHIVE
  DELETEINIStr "$sysdrive\BOOT.INI" "operating systems" "$sysdrive\PELOAD"
  SetFileAttributes "$sysdrive\BOOT.INI" HIDDEN|READONLY|system|ARCHIVE 

  ;删除快捷方式
  Delete "$SMPROGRAMS\通用 PE 工具箱\访问通用论坛.lnk"
  Delete "$SMPROGRAMS\通用 PE 工具箱\卸载.lnk"
  RMDir "$SMPROGRAMS\通用 PE 工具箱"

  ;删除卸载注册表
  DeleteRegKey ${PRODUCT_UNINST_R0OT_KEY} "${PRODUCT_UNINST_KEY}"
  SetAutoClose true
SectionEnd

#-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#

Function un.onInit
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
  Abort
FunctionEnd

Function un.onUninstSuccess
  HideWindow
  MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从你的计算机移除。"
FunctionEnd