1、U盘安装PE启动通用安装器源码及教程U盘安装PE启动通用安装器源码及教程-开源大礼我写了很多的U盘启动安装软件,包括系统安装,系统维护安装的工具,受到网友大量下载和关注。今天将其中一个最满意的作品源码公开,帮助更多的的爱好者可以自己制作属于你自己的第一个软件。通用一键U盘PE安装器 USB2PE.exe源码我就有这样的魄力愿意公开自己的源码,让知识快速传播出去!我认为知识是通过开源来传承的。教程很简单,我都在源码里加了注析,一看就懂,一学就会,一碰就做。首先您下载一个NSIS编译器中文版,推荐下载吧的 Nullsoft Scriptable Install System(nsis定制安装程序)
2、V2.45汉化增强版然后安装,然后下载我的源码,然后按下图对着nsi文件右键编译就可以生成exe安装器。#神雕teasiu开源大礼,作者 teasiu#让菜鸟都可以制作自己的软件#您可以任意修改本代码,但是请保留原作者信息。#!define NAME PE2USB!define DISTRO WINPE!define FILENAME PE2USB!define VERSION 0.1!define MUI_ICON usb48.icoRequestExecutionLevel highest ;设置用户最高权限SetCompressor LZMA ;压缩格式CRCCheck OnXPStyl
3、e on ;如果xp系统使用时,适应xp的风格ShowInstDetails showBrandingText USBPE通用安装器 神雕teasiu作品CompletedText 安装结束,欢迎使用和收藏本工具! -神雕teasiuInstallButtonText 创 建 ;将先一步按钮改名为创建Name $NAME $VERSIONOutFile $FILENAME $VERSION.exe ;生成的exe文件名!include nsDialogs.nsh!include MUI2.nsh!include FileFunc.nsh!include WordFunc.nsh ;磁盘列表;
4、页面头设置!define MUI_HEADERIMAGE!define MUI_HEADERIMAGE_BITMAP usb-logo2.bmp!define MUI_HEADERIMAGE_BITMAP_NOSTRETCH!define MUI_HEADERIMAGE_RIGHT ;右边显示logo图标,左边则改为LEFT; 定义各项变量Var DestDriveTxtVar DestDriveVar DestDiskVar LabelDrivePageTextVar LabelDriveSelectVar FormatVar FormatMeVar Hddmode ;在这个例子里我换成了s
5、yslinux模式Var Zipmode ;在这个例子里我换成了grub4dos模式Var HddmodeMeVar ZipmodeMeVar WarningVar SoftVar LinkVar LinksVar ImageVar hImageVar IsoVar ISOFileTxtVar ISOSelectionVar TheISOVar ISOTestVar ISOFilevar BootDirPage custom drivePage ;只定义了一页!define MUI_INSTFILESPAGE_COLORS 00FF00 000000; Instfiles page!defin
6、e MUI_TEXT_INSTALLING_TITLE $(Install_Title)!define MUI_TEXT_INSTALLING_SUBTITLE $(Install_SubTitle)!define MUI_TEXT_FINISH_SUBTITLE $(Install_Finish_Sucess)!insertmacro MUI_PAGE_INSTFILES; Language files!insertmacro MUI_LANGUAGE SimpChinese ;仅支持中文LangString DrivePage_Title $LANG_SIMPCHINESE 【PE2USB
7、】USB通用PE安装器LangString DrivePage_Title2 $LANG_SIMPCHINESE 先插入一个USB盘,然后再打开本软件进行安装.LangString DrivePage_Text $LANG_SIMPCHINESE 本工具将使您的U盘完美启动.LangString DrivePage_Input $LANG_SIMPCHINESE 第一步:点击下拉菜单选择您的U盘LangString Soft_Text $LANG_SIMPCHINESE 第二步:选择您的ISO内置的启动引导模式。必选。LangString Iso_Text $LANG_SIMPCHINESE
8、第三步:选择您的ISO镜像文件。LangString WarningPage_Text $LANG_SIMPCHINESE 注意:请确保U盘资料已备份。原资料将被完全覆写并不可恢复!LangString Creation $LANG_SIMPCHINESE 创建启动和解压ISO镜像文件到U盘,请稍后LangString Install_Title $LANG_SIMPCHINESE 安装中 $DISTROLangString Install_SubTitle $LANG_SIMPCHINESE 请稍后 $NAME 安装 $DISTRO 到 $DestDiskLangString Install
9、_Finish_Sucess $LANG_SIMPCHINESE $t $NAME 已经完成安装$DISTRO到$DestDiskLangString IsoFile $LANG_SIMPCHINESE ISO镜像文件|*.isoLangString Syslinux_Warning $LANG_SIMPCHINESE 一个错误 ($R8) 发生在当安装syslinux时.$r$n您的USB驱动器将不可启动.$r$n建议您更换U盘或格式化该盘后再试一次。LangString grub4dos_Warning $LANG_SIMPCHINESE 一个错误 ($R8) 发生在当安装grub4dos
10、时.$r$n您的USB驱动器将不可启动.$r$n建议您更换U盘或格式化该盘后再试一次。Function .onInitInitPluginsDirSetOutPath $PLUGINSDIR ;开始时将所有资源调进临时文件夹以便后面直接调用File /r src*.*FunctionEndFunction drivePage!insertmacro MUI_HEADER_TEXT $(DrivePage_Title) $(DrivePage_Title2)nsDialogs:Create 1018$If $DestDrive = GetDlgItem $6 $HWNDPARENT 1 ; 控制
11、下一步的句柄EnableWindow $6 0 ; 关闭下一步按钮$EndIf; 创建bmp广告位图$NSD_CreateBitmap 75% 0 20% 100% Pop $Image$NSD_SetImage $Image $PLUGINSDIRad.bmp $hImage$NSD_CreateLabel 0 0 70% 30 $(DrivePage_Text)Pop $LabelDrivePageText$NSD_CreateLabel 0 20 70% 15 $(DrivePage_Input)Pop $LabelDriveSelectSetCtlColors $LabelDriveS
12、elect /Branding 0000BD ; 蓝色字体;创建下拉菜单$NSD_CreateDroplist 0 40 30% 25 Pop $DestDriveTxt$NSD_OnChange $DestDriveTxt db_select.onchange$GetDrives FDD driveList ;FDD表示仅显示移动磁盘即U盘, HDD表示显示本地磁盘即硬盘, ALL表示显示所有磁盘$If $DestDrive != $NSD_CB_SelectString $DestDriveTxt $DestDrive$EndIf; 增加帮助或更新网址链接$NSD_CreateLink 8
13、5% 190 15% 14 软件更新Pop $Link$NSD_OnClick $Link onClickMyLink; 格式化选项$NSD_CreateButton 32% 38 38% 22 (可选)FAT32格式化此U盘Pop $Format$NSD_OnClick $Format FormatIt; 说明文字$NSD_CreateLabel 0 70 70% 15 $(Soft_Text) ;软件内容,括号里面是调回上面的中文文字Pop $SoftSetCtlColors $Soft /Branding 0000BD ;蓝色$NSD_CreateLabel 0 115 70% 15 $
14、(Iso_Text) ;内容Pop $IsoSetCtlColors $Iso /Branding 0000BD ;蓝色$NSD_CreateText 0 135 50% 20 浏览已下载的*.iso文档并选择Pop $ISOFileTxt$NSD_CreateBrowseButton 53% 135 65 20 浏览Pop $ISOSelection$NSD_OnClick $ISOSelection ISOBrowse; 磁盘启动模式选项$NSD_CreateCheckBox 0 90 36% 15 Syslinux启动模式.Pop $Hddmode$NSD_Check $Hddmode
15、; 默认此项打钩$NSD_OnClick $Hddmode HddmodeIt$NSD_CreateCheckBox 38% 90 36% 15 Grub4dos启动模式.Pop $Zipmode$NSD_OnClick $Zipmode ZipmodeIt; 警示标签$NSD_CreateLabel 0 190 80% 14 $(WarningPage_Text)Pop $WarningEnableWindow $Format 0 ;关闭提示EnableWindow $Hddmode 0EnableWindow $Zipmode 0EnableWindow $ISOFileTxt 0Enab
16、leWindow $ISOSelection 0ShowWindow $Warning 0GetDlgItem $6 $HWNDPARENT 3ShowWindow $6 0 ; 屏蔽回去nsDialogs:Show$NSD_FreeImage $hImage ; 释放位图FunctionEndFunction ISOBrowsensDialogs:SelectFileDialog open $EXEDIR $(IsoFile) ;如果软件同目录里有ISO文键,自动选择Pop $TheISO$NSD_SetText $ISOFileTxt $TheISOSetCtlColors $ISOFil
17、eTxt 009900 FFFFFFStrCpy $ISOTest $TheISOStrCpy $ISOFile $TheISO ; 定义选择的镜像文件为ISOFile,以便后面解压$NSD_SetText $Iso 第三步完成,您的ISO镜像文件已选择.$NSD_CreateLabel 0 165 75% 14 OK,点击创建即可GetDlgItem $6 $HWNDPARENT 1 ; 控制下一步的句柄EnableWindow $6 1 ; 打开下一步按钮FunctionEndFunction onClickMyLinkPop $Links ; 为了避免错误,pop定量ExecShell
18、open FunctionEndFunction db_select.onchangePop $DestDriveTxt$NSD_GetText $DestDriveTxt $0StrCpy $DestDrive $0StrCpy $DestDisk $DestDrive -1EnableWindow $Format 1 ;打开提示EnableWindow $Hddmode 1EnableWindow $Zipmode 1EnableWindow $ISOFileTxt 1EnableWindow $ISOSelection 1ShowWindow $Warning 1SetCtlColors
19、 $Warning /Branding FF0000Call HddmodeItCall ZipmodeItFunctionEnd;盘符列表方程Function driveListSendMessage $DestDriveTxt $CB_ADDSTRING 0 STR:$9Push 1FunctionEndFunction HddmodeIt$NSD_GetState $Hddmode $HddmodeMe$If $HddmodeMe = $BST_CHECKED$NSD_Check $HddmodeStrCpy $HddmodeMe Yes$NSD_SetText $Hddmode (已选
20、)Syslinux启动模式$NSD_Uncheck $ZipmodeStrCpy $ZipmodeMe No$NSD_SetText $Zipmode Grub4dos启动模式$ElseIf $HddmodeMe = $BST_UNCHECKED$NSD_Uncheck $HddmodeStrCpy $HddmodeMe No$NSD_SetText $Hddmode Syslinux启动模式$NSD_Check $ZipmodeStrCpy $ZipmodeMe Yes$NSD_SetText $Zipmode (已选)Grub4dos启动模式$EndIfFunctionEndFunctio
21、n ZipmodeIt ; Set Format2 Option$NSD_GetState $Zipmode $ZipmodeMe$If $ZipmodeMe = $BST_CHECKED$NSD_Check $ZipmodeStrCpy $ZipmodeMe Yes$NSD_SetText $Zipmode (已选)Grub4dos启动模式$NSD_Uncheck $HddmodeStrCpy $HddmodeMe No$NSD_SetText $Hddmode Syslinux启动模式$ElseIf $ZipmodeMe = $BST_UNCHECKED$NSD_Uncheck $Zipm
22、odeStrCpy $ZipmodeMe No$NSD_SetText $Zipmode Grub4dos启动模式$NSD_Check $HddmodeStrCpy $HddmodeMe Yes$NSD_SetText $Hddmode (已选)Syslinux启动模式$EndIfFunctionEndFunction FormatIt ; 设置格式化配置Pop $FormatMeMessageBox MB_YESNO 格式化U盘可以取回全部空间,继续吗? IDYES true IDNO falsetrue:Goto nextfalse:MessageBox MB_OK|MB_ICONSTOP
23、 不格式化,退出Abortnext:MessageBox MB_YESNO 真的格式化吗?(请确保您的U盘资料已经备份,格式化将擦除U盘资料且不可恢复) /SD IDYES IDNO false2Goto next2false2:MessageBox MB_OK|MB_ICONSTOP 不格式化,退出Abortnext2: ;这是fbinst的格式化dos命令,详细请参考fbinst的官方说明, fbinst命令支持盘符c:的表示形式和hd0,hd1的表示形式nsExec:ExecToLog cmd /c echo y|$PLUGINSDIRfbinst $DestDisk format -r
24、aw -force -fat32MessageBox MB_OK 格式化完成,恢复U盘全部空间。FunctionEndFunction InstallEYesSetShellVarContext allStrCpy $R0 $DestDrive -1 ; 将盘符后面的字符截去,表示为如D: 再定义为$R0ClearErrors$If $HddmodeMe = YesDetailPrint 创建syslinux的引导到 $DestDisk, 请稍后ExecWait $PLUGINSDIRsyslinux.exe -maf $R0 $R8 ; 这是syslinux的dos命令行,详情请参考官方说明
25、DetailPrint Syslinux安装返回信息检测值=$R8 , 0表示成功Banner:destroy$If $R8 != 0 ; 如果返回值不是0,则弹出警告提示框MessageBox MB_ICONEXCLAMATION|MB_OK $(Syslinux_Warning)DetailPrint 请更换u盘或格式化后再试一次。$EndIfCall syscopyfile$ElseIf $ZipmodeMe = YesDetailPrint 创建Grub4dos启动模式的引导到 $DestDisk, 请稍后ExecWait $PLUGINSDIRBOOTICE.EXE /DEVICE=
26、$R0 /mbr /install /type=grub4dos /auto $R8 ; bootice支持的命令行,有很多用法,参考官方DetailPrint Grub4dos安装返回信息检测值=$R8 , 0表示成功Banner:destroy$If $R8 != 0 ; 如果返回值不是0,则弹出警告提示框MessageBox MB_ICONEXCLAMATION|MB_OK $(grub4dos_Warning)DetailPrint 请更换u盘或格式化后再试一次。$EndIfCall grubcopyfile$EndIfFunctionEndFunction syscopyfile$I
27、f $FileExists $BootDirsyslinux.cfg;什么也不做$ElseIf $FileExists $BootDirsyslinuxsyslinux.cfg;什么也不做$ElseIf $FileExists $BootDirbootsyslinuxsyslinux.cfg;什么也不做$ElseIf $FileExists $BootDirbootisolinuxisolinux.cfgRename $BootDirbootisolinux $BootDirbootsyslinuxRename $BootDirbootsyslinuxisolinux.cfg $BootDir
28、bootsyslinuxsyslinux.cfg$ElseIf $FileExists $BootDirisolinuxisolinux.cfgRename $BootDirisolinux $BootDirsyslinuxRename $BootDirsyslinuxisolinux.cfg $BootDirsyslinuxsyslinux.cfg$ElseIf $FileExists $BootDirisolinux.cfgRename $BootDirisolinux.cfg $BootDirsyslinux.cfg$Else ; 上面的文件都没有时DetailPrint 没有找到sys
29、linux标准配置文件syslinux.cfgDetailPrint 可能是您安装的ISO不是使用syslinux引导,DetailPrint 或者是引导文件被修改为其他名字使我无法识别,DetailPrint 请尝试其他启动方式或者手动寻找并编辑引导文件。$EndIf; 继续检测syslinux的图形菜单,以达到版本一致$If $FileExists $BootDirvesamenu.c32CopyFiles $PLUGINSDIRvesamenu.c32 $BootDirvesamenu.c32$ElseIf $FileExists $BootDirsyslinuxvesamenu.c32CopyFiles $PLUGINSDIRvesamenu.c32 $BootDirsyslinuxvesamenu.c32$ElseIf $FileExists $BootDir