找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3317|回复: 29

[原创] 带密码一键部署PE NSIS脚本 重启进入PE一次有效!!!

[复制链接]
发表于 2025-11-28 09:11:34 | 显示全部楼层 |阅读模式
本帖最后由 cls822001 于 2025-11-28 09:15 编辑

带密码一键部署PE NSIS脚本 直接上代码 自己用更改GUID
  1. Unicode false
  2. !include "LogicLib.nsh"
  3. !include "FileFunc.nsh"
  4. !include MUI2.nsh
  5. !define Password "Password2025"
  6. !define GUID "{566C315E-2697-4E54-83FF-45EDDCFF12B5}"
  7. !define PEGUID "{566C315F-2697-4E54-83FF-45EDDCFF12B5}"

  8. Name "欢迎使用WinPE"
  9. OutFile "WinPE安装程序.exe"

  10. ; 界面设置 - 跳过欢迎页面,直接从密码页面开始
  11.   !define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit
  12.   Page Custom PasswordPageShow PasswordPageLeave
  13.   !define MUI_PAGE_CUSTOMFUNCTION_PRE 'CopyFiles'
  14.   !define MUI_PAGE_CUSTOMFUNCTION_SHOW MyInstFiles
  15.   !insertmacro MUI_PAGE_INSTFILES

  16. !insertmacro MUI_LANGUAGE "SimpChinese"

  17. Icon start.ico
  18. ShowInstDetails nevershow
  19. AutoCloseWindow true
  20. BrandingText "在线一键安装系统"
  21. Caption ""

  22. Function PasswordPageShow
  23.   !insertmacro MUI_HEADER_TEXT "输入密码" "安装程序需要一个正确的安装密码才能继续。"
  24.   PassDialog::InitDialog /NOUNLOAD Password /HEADINGTEXT "请致电 XXXXXXXXXXX 索取密码。" /GROUPTEXT "密码输入框"
  25.   Pop $R0
  26.   GetDlgItem $R1 $HWNDPARENT 1
  27.   ShowWindow $R1 ${SW_HIDE}
  28.   GetDlgItem $R1 $HWNDPARENT 2 ; 取消按钮ID=2
  29.   ShowWindow $R1 ${SW_HIDE}
  30.   GetDlgItem $R1 $HWNDPARENT 3 ; 后退按钮ID=3
  31.   ShowWindow $R1 ${SW_HIDE}
  32.   PassDialog::Show
  33. FunctionEnd

  34. Function PasswordPageLeave
  35.   Pop $R0
  36.   StrCmp $R0 "${Password}" password_correct
  37.   MessageBox MB_OK|MB_ICONEXCLAMATION "密码输入错误!请输入正确的安装密码!"
  38.   Abort
  39. password_correct:
  40.   MessageBox MB_OK|MB_ICONINFORMATION "密码输入正确!请点击$\"确定$\"继续进行安装!"
  41. FunctionEnd


  42. Section "主程序" SecMain
  43.         SetDetailsPrint textonly
  44.         DetailPrint "ToDesk正在下载最新PE文件...."
  45.         SetDetailsPrint listonly
  46.         SetOutPath C:\YXPE
  47. ; 本地文件示例;YXPE.7z 文件包括 boot.sdi winpe.wim
  48. ;        File YXPE.7z
  49. ;        Nsis7z::ExtractWithDetails "C:\YXPE\YXPE.7z" "文件解压进度 %s..."
  50. ;        Delete "C:\YXPE\YXPE.7z"
  51. ; 网络下载文件
  52.   NScurl::http GET "http://down.jywangluo.cn:88/PE/YXPE.7z" "$PLUGINSDIR\YXPE.7z"
  53.   Nsis7z::ExtractWithDetails "$PLUGINSDIR\YXPE.7z" "文件解压进度 %s..."
  54.   SetFileAttributes "C:\YXPE" HIDDEN
  55.   SetDetailsPrint textonly
  56.         DetailPrint "添加启动菜单...."
  57.         SetDetailsPrint listonly
  58.         System::Call "Kernel32::Wow64EnableWow64FsRedirection(i 0)"
  59.         nsExec::Exec 'bcdedit /create ${GUID} /device'
  60.   nsExec::Exec 'bcdedit /set ${GUID} ramdisksdidevice partition=C:'
  61.   nsExec::Exec 'bcdedit /set ${GUID} ramdisksdipath \YXPE\boot.sdi'
  62.   nsExec::Exec 'bcdedit /create ${PEGUID} /d "WinPE 网络维护环境" /application osloader'
  63.   nsExec::Exec 'bcdedit /set ${PEGUID} device ramdisk=[C:]\YXPE\winpe.wim,${GUID}'
  64.   nsExec::Exec 'bcdedit /set ${PEGUID} osdevice ramdisk=[C:]\YXPE\winpe.wim,${GUID}'
  65.   ReadEnvStr $0 "firmware_type"
  66.   ${If} $0 == "UEFI"
  67.     nsExec::Exec 'bcdedit /set ${PEGUID} path \windows\system32\boot\winload.efi'
  68.   ${Else}
  69.     nsExec::Exec 'bcdedit /set ${PEGUID} path \windows\system32\boot\winload.exe'
  70.   ${EndIf}
  71.   nsExec::Exec 'bcdedit /set ${PEGUID} locale zh-CN'
  72.   nsExec::Exec 'bcdedit /set ${PEGUID} systemroot \windows'
  73.   nsExec::Exec 'bcdedit /set ${PEGUID} winpe yes'
  74.   nsExec::Exec 'bcdedit /set ${PEGUID} detecthal yes'
  75.   nsExec::Exec 'bcdedit /displayorder ${PEGUID} /addlast'
  76.   nsExec::Exec 'bcdedit /bootsequence ${PEGUID} /addfirst'
  77.   nsExec::Exec 'bcdedit /timeout 10'
  78.   MessageBox MB_YESNO "立即重启系统进入PE点是!稍后自行重启点否" IDYES true IDNO false
  79.   true:
  80.   Reboot
  81.   false:
  82.   Quit
  83. SectionEnd

  84. Function .onInit
  85.   BrandingURL::Unload
  86. FunctionEnd

  87. Function MyInstFiles
  88.    GetDlgItem $0 $HWNDPARENT 1 ;下一步
  89.    ShowWindow $0 ${SW_HIDE}
  90.    GetDlgItem $0 $HWNDPARENT 2 ;取消
  91.    ShowWindow $0 ${SW_HIDE}
  92.    GetDlgItem $1 $HWNDPARENT 3 ;上一步
  93.    ShowWindow $1 ${SW_HIDE}
  94.    GetDlgItem $0 $HWNDPARENT 1037
  95.    SendMessage $0 ${WM_SETTEXT} 0 "STR: "
  96.    GetDlgItem $0 $HWNDPARENT 1038
  97.    SendMessage $0 ${WM_SETTEXT} 0 "STR:正在下载最新PE文件,请稍候...."
  98. FunctionEnd

  99. Function 'CopyFiles'
  100. GetDlgItem $R0 $HWNDPARENT 1
  101. System::Call 'user32::GetWindowLong(i $hwndparent,i -16)i.r0'
  102.   intop $1 0x80000 ~
  103.   intop $0 $0 & $1
  104. System::Call 'user32::SetWindowLong(i $hwndparent,i -16,i $0)i'
  105. FunctionEnd

  106. Function onGUIInit
  107.    BrandingURL::Set /NOUNLOAD "0" "0" "255" "http://down.jywangluo.cn:88"
  108. FunctionEnd
复制代码


发表于 2025-11-28 09:22:41 | 显示全部楼层
支持折腾~~~~~~~~
回复

使用道具 举报

发表于 2025-11-28 09:42:07 | 显示全部楼层
感谢大佬分享
回复

使用道具 举报

发表于 2025-11-28 09:58:12 | 显示全部楼层
好。。。。。。。
回复

使用道具 举报

发表于 2025-11-28 10:30:41 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2025-11-28 10:40:18 | 显示全部楼层
感谢分享脚本
回复

使用道具 举报

发表于 2025-11-28 10:58:50 | 显示全部楼层
感谢,辛苦了。
回复

使用道具 举报

发表于 2025-11-28 11:12:15 | 显示全部楼层
感謝大大分享!^^ 辛苦了!
回复

使用道具 举报

发表于 2025-11-28 11:47:35 | 显示全部楼层
支持原创,谢谢楼主的分享!
回复

使用道具 举报

发表于 2025-11-28 11:49:41 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2025-11-28 11:51:59 | 显示全部楼层
支持折腾~~~~~~~~
回复

使用道具 举报

发表于 2025-11-28 11:52:55 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2025-11-28 11:55:58 | 显示全部楼层
感谢分享!
回复

使用道具 举报

发表于 2025-11-28 12:35:28 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2025-11-28 13:43:55 | 显示全部楼层
好。。。。。。。。。。
回复

使用道具 举报

发表于 2025-11-28 13:48:06 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2025-11-28 14:06:09 来自手机 | 显示全部楼层
多谢楼主分享
回复

使用道具 举报

发表于 2025-11-28 14:15:16 | 显示全部楼层
感谢分享!
回复

使用道具 举报

发表于 2025-11-28 14:43:24 | 显示全部楼层
感谢分享脚本
回复

使用道具 举报

发表于 2025-11-28 15:01:32 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2025-11-28 15:30:35 | 显示全部楼层
谢谢分享一定要试试
回复

使用道具 举报

发表于 2025-11-28 15:43:22 | 显示全部楼层

感谢大佬分享
回复

使用道具 举报

发表于 2025-11-28 15:55:56 | 显示全部楼层
看为懂,谢谢!
回复

使用道具 举报

发表于 2025-11-28 16:18:11 | 显示全部楼层
这是不是   给 系统加了一个 锁     
购买 之后 才 可以使用
但是这密码  太单一   (一人购买 其他人也可以 使用把)
回复

使用道具 举报

发表于 2025-11-28 16:44:55 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2025-11-28 19:13:31 | 显示全部楼层
多谢楼主提供分享!
回复

使用道具 举报

发表于 2025-12-3 08:43:50 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2025-12-3 09:07:29 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

发表于 2026-3-30 12:59:16 | 显示全部楼层
没有卸载?

点评

Unicode false !include "LogicLib.nsh" !include "FileFunc.nsh" !include MUI2.nsh !include "Sections.nsh" !define GUID "{566C315E-2697-4E54-83FF-45EDDCFF12B5}" !define PEGUID "{566C315F-2697-4E54-83FF-  详情 回复 发表于 2026-3-30 13:03
回复

使用道具 举报

 楼主| 发表于 2026-3-30 13:03:00 | 显示全部楼层

Unicode false
!include "LogicLib.nsh"
!include "FileFunc.nsh"
!include MUI2.nsh
!include "Sections.nsh"

!define GUID "{566C315E-2697-4E54-83FF-45EDDCFF12B5}"
!define PEGUID "{566C315F-2697-4E54-83FF-45EDDCFF12B5}"

Name "欢迎使用WinPE"
OutFile "WinPE在线安装程序.exe"

; 添加卸载相关定义
!define UNINSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPE_Installer"
!define UNINSTALL_EXE "C:\YXPE\Uninstall_WinPE.exe"

; 界面设置
!define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit
!define MUI_PAGE_CUSTOMFUNCTION_PRE 'CopyFiles'
!define MUI_PAGE_CUSTOMFUNCTION_SHOW MyInstFiles
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "SimpChinese"

Icon start.ico
ShowInstDetails nevershow
ShowUninstDetails nevershow
AutoCloseWindow true
BrandingText "在线一键安装系统"
Caption ""

Var InstallSize
Var UninstallCreated

Section "主程序" SecMain
        SetDetailsPrint textonly
        DetailPrint "正在下载最新PE文件...."
        SetDetailsPrint listonly

        ; 创建安装目录
        SetOutPath C:\YXPE
        File boot.sdi

        ; 下载PE文件
        NScurl::http GET "http://down.jywangluo.cn:88/PE/PE.7z" "$PLUGINSDIR\PE.7z"
        Nsis7z::ExtractWithDetails "$PLUGINSDIR\PE.7z" "文件解压进度 %s..."

        ; 设置隐藏属性
        SetFileAttributes "C:\YXPE" HIDDEN

        SetDetailsPrint textonly
        DetailPrint "添加PE启动菜单...."
        SetDetailsPrint listonly

        ; 添加启动项
        System::Call "Kernel32::Wow64EnableWow64FsRedirection(i 0)"
        nsExec::Exec 'bcdedit /create ${GUID} /device'
        nsExec::Exec 'bcdedit /set ${GUID} ramdisksdidevice partition=C:'
        nsExec::Exec 'bcdedit /set ${GUID} ramdisksdipath \YXPE\boot.sdi'
        nsExec::Exec 'bcdedit /create ${PEGUID} /d "WinPE 网络维护环境" /application osloader'
        nsExec::Exec 'bcdedit /set ${PEGUID} device ramdisk=[C:]\YXPE\YXPE.wim,${GUID}'
        nsExec::Exec 'bcdedit /set ${PEGUID} osdevice ramdisk=[C:]\YXPE\YXPE.wim,${GUID}'

        ; 检测启动类型
        File "/oname=$PLUGINSDIR\BootType.exe" "BootType.exe"
        nsExec::ExecToStack $PLUGINSDIR\BootType.exe
        Pop $0
        Pop $1
        ${If} $1 == "UEFI"
                nsExec::Exec 'bcdedit /set ${PEGUID} path \windows\system32\boot\winload.efi'
                Version::IsWindows7
                Pop $R0
                StrCmp $R0 "1" is_win7 not_win7
                is_win7:
                        SetDetailsPrint textonly
                        DetailPrint "当前系统是Win7UEFI系统将自动执行引导文件替换"
                        SetDetailsPrint listonly
                        File "/oname=$PLUGINSDIR\MountEFIfix.exe" "MountEFIfix.exe"
                        ExecWait "$PLUGINSDIR\MountEFIfix.exe /S"
                        SetDetailsPrint textonly
                        DetailPrint "Win7UEFI EFI分区引导文件修复完成"
                        SetDetailsPrint listonly
                        Goto done
                not_win7:
                        Goto done
        ${Else}
                nsExec::Exec 'bcdedit /set ${PEGUID} path \windows\system32\boot\winload.exe'
        ${EndIf}

        done:
        nsExec::Exec 'bcdedit /set ${PEGUID} locale zh-CN'
        nsExec::Exec 'bcdedit /set ${PEGUID} systemroot \windows'
        nsExec::Exec 'bcdedit /set ${PEGUID} winpe yes'
        nsExec::Exec 'bcdedit /set ${PEGUID} detecthal yes'
        nsExec::Exec 'bcdedit /displayorder ${PEGUID} /addlast'
        nsExec::Exec 'bcdedit /bootsequence ${PEGUID} /addfirst'
        nsExec::Exec 'bcdedit /timeout 10'

        ; 计算安装目录大小
        SetDetailsPrint textonly
        DetailPrint "正在计算安装目录大小..."
        SetDetailsPrint listonly

        ${GetSize} "C:\YXPE" "/S=0K" $0 $1 $2
  IntFmt $InstallSize "0x%08X" $0

        ; 创建卸载程序
        SetDetailsPrint textonly
        DetailPrint "正在创建卸载程序..."
        SetDetailsPrint listonly
        Call CreateUninstaller

        ; 询问是否重启
        MessageBox MB_YESNO|MB_ICONQUESTION "安装完成!立即重启系统进入PE点是!稍后自行重启点否" IDYES true IDNO false
        true:
                Reboot
        false:
                Quit
SectionEnd

Function CreateUninstaller
        ; 写入卸载程序
        SetOutPath "C:\YXPE"
        WriteUninstaller "${UNINSTALL_EXE}"

        ; 写入注册表卸载信息
        WriteRegStr HKLM "${UNINSTALL_KEY}" "DisplayName" "WinPE 网络维护环境"
        WriteRegStr HKLM "${UNINSTALL_KEY}" "UninstallString" "${UNINSTALL_EXE}"
        WriteRegStr HKLM "${UNINSTALL_KEY}" "DisplayIcon" "${UNINSTALL_EXE}"
        WriteRegStr HKLM "${UNINSTALL_KEY}" "Publisher" "东莞顺艺网络科技"
        WriteRegStr HKLM "${UNINSTALL_KEY}" "DisplayVersion" "1.0.0"
        WriteRegStr HKLM "${UNINSTALL_KEY}" "InstallLocation" "C:\YXPE"
        WriteRegDWORD HKLM "${UNINSTALL_KEY}" "EstimatedSize" $InstallSize
        WriteRegDWORD HKLM "${UNINSTALL_KEY}" "NoModify" 1
        WriteRegDWORD HKLM "${UNINSTALL_KEY}" "NoRepair" 1
        StrCpy $UninstallCreated "1"
FunctionEnd

Section "Uninstall"
        SetDetailsPrint textonly
        DetailPrint "正在卸载 WinPE..."
        SetDetailsPrint listonly

        ; 删除启动项
        System::Call "Kernel32::Wow64EnableWow64FsRedirection(i 0)"
        nsExec::Exec 'bcdedit /delete ${PEGUID} /f'
        nsExec::Exec 'bcdedit /delete ${GUID} /f'

        ; 删除文件
        SetDetailsPrint textonly
        DetailPrint "正在删除安装文件..."
        SetDetailsPrint listonly

        RMDir /r "C:\YXPE"


        ; 删除注册表项
        SetDetailsPrint textonly
        DetailPrint "正在删除注册表信息..."
        SetDetailsPrint listonly

        DeleteRegKey HKLM "${UNINSTALL_KEY}"

        ; 删除卸载程序自身
        SetDetailsPrint textonly
        DetailPrint "正在删除卸载程序..."
        SetDetailsPrint listonly

        Delete "${UNINSTALL_EXE}"

        SetDetailsPrint textonly
        DetailPrint "卸载完成!"
        DetailPrint "WinPE 已从您的系统中移除。"
        Sleep 2000
        SetAutoClose true
SectionEnd

Function .onInit
        BrandingURL::Unload

        ; 检查是否已经安装
        ReadRegStr $0 HKLM "${UNINSTALL_KEY}" "UninstallString"
        StrCmp $0 "" skipUninstallCheck

        MessageBox MB_YESNO|MB_ICONQUESTION "检测到系统中已安装 WinPE,是否先卸载旧版本?" IDYES uninstallOld IDNO skipUninstallCheck

        uninstallOld:
                ExecWait "$0"

        skipUninstallCheck:
FunctionEnd

Function MyInstFiles
        GetDlgItem $0 $HWNDPARENT 1 ;下一步
        ShowWindow $0 ${SW_HIDE}
        GetDlgItem $0 $HWNDPARENT 2 ;取消
        ShowWindow $0 ${SW_HIDE}
        GetDlgItem $1 $HWNDPARENT 3 ;上一步
        ShowWindow $1 ${SW_HIDE}
        GetDlgItem $0 $HWNDPARENT 1037
        SendMessage $0 ${WM_SETTEXT} 0 "STR: "
        GetDlgItem $0 $HWNDPARENT 1038
        SendMessage $0 ${WM_SETTEXT} 0 "STR:正在下载最新PE文件,请稍候...."
FunctionEnd

Function 'CopyFiles'
        GetDlgItem $R0 $HWNDPARENT 1
        System::Call 'user32::GetWindowLong(i $hwndparent,i -16)i.r0'
        intop $1 0x80000 ~
        intop $0 $0 & $1
        System::Call 'user32::SetWindowLong(i $hwndparent,i -16,i $0)i'
FunctionEnd

Function onGUIInit
        BrandingURL::Set /NOUNLOAD "0" "0" "255" "http://down.jywangluo.cn:88"
FunctionEnd
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-8-2 00:33

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表