无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: teasiu
打印 上一主题 下一主题

[原创] 通用一键U盘PE安装器脚本源码及教程--开源大礼(已发布至3个)★★★★★

    [复制链接]
1#
发表于 2011-4-23 17:32:33 | 显示全部楼层
回复

使用道具 举报

2#
发表于 2011-4-23 19:52:49 | 显示全部楼层

谢谢你的源码。我已经做了一个并测试成功了。

以前我封装软件一直用SmartInstallMaker。但是这个软件功能太弱了。
很想自己写一个软件来安装U盘维护系统,但是对NSIS不懂,一直没有办法。
今天终于可以用上了,再次谢谢!
回复

使用道具 举报

3#
发表于 2011-4-24 14:51:20 | 显示全部楼层
提下建议:1、界面稍难看了些。可以自定义吗?
2、不能选择移动硬盘。这个可以改变吗?
3、在U盘有隐藏分区的情况下,能否不格式化U盘而更新隐藏分区的内容?
回复

使用道具 举报

4#
发表于 2011-4-24 17:13:31 | 显示全部楼层
原帖由 2010teasiu 于 2011-4-24 16:25 发表


1、认真学习一下NSIS吧,你就知道怎么改了
2、移动硬盘请将FDD改为HDD,就可以看到了,不是有注解吗?干嘛不认真看?
3、用fbinstool更改不是更方便?

1、今天看了下NSIS的教程,有时间学习学习。
2、如果改成HDD,U盘还可以识别吗?另外HDD你注解的是本地硬盘。这样会误把本地硬盘给格了吗?
3、FBINSTOOL是更方便。但既然用了这个东西,希望这个东西更好些。
回复

使用道具 举报

5#
发表于 2011-4-24 17:14:33 | 显示全部楼层
原帖由 2010teasiu 于 2011-4-24 16:23 发表


你的fba包大于80M了,你当然应该修改一下参数啦!
我不是已经写了注解在里面吗?为什么不认真阅读?

不过,我今天写了一个新的代码,自动判断fba包大小,并且自动修正隐藏区的数据区大小,嘿嘿,我自己 ...


这个代码可以公布吗?
不然每次都得修改FBA包的大小参数。有时候忘记了就麻烦了。。。。
回复

使用道具 举报

6#
发表于 2011-4-24 17:16:43 | 显示全部楼层
还有:LangString Iso_Text ${LANG_SIMPCHINESE} "第三步:选择您的FBA镜像文件。"

这段应该是多余的,可以删掉吧。
回复

使用道具 举报

7#
发表于 2011-4-24 17:18:30 | 显示全部楼层
原帖由 2010teasiu 于 2011-4-24 17:16 发表


2、可以这样解决: 做多一个checkbox, 点击显示全部磁盘(请慎用),然后这个checkbox 显示ALL


现在刚接触NSIS,虽然还能够看懂一些。但大部分还是一头雾水。
能够麻烦你把代码写好贴出来吗?
回复

使用道具 举报

8#
发表于 2011-4-24 17:23:10 | 显示全部楼层
谢谢你的解答。期待“自动判断fba包大小,并且自动修正隐藏区的数据区大小”代码的公开。
回复

使用道具 举报

9#
发表于 2011-4-24 17:37:16 | 显示全部楼层
原帖由 2010teasiu 于 2011-4-24 17:26 发表 http://bbs.wuyou.net/forum.php?m ... ;tid=190465&extra=page%3D1
这个好像是exe的,没有代码吧!
回复

使用道具 举报

10#
发表于 2011-5-1 16:28:47 | 显示全部楼层
我修改了你的代码。也生成了exe。
但NSIS编译器提示如下:


请问是哪里出了错。是否影响使用?

  1. ##这是一个可以安装fba包的u盘启动安装器源码,
  2. ##资源包src里面的ty.fba是一个空文件,请用自己的fba包替换。
  3. ##=====================================
  4. ##本源码由teasiu@163.com创建。请保留此信息。
  5. ##=====================================
  6. !define NAME "天意U盘维护系统"
  7. !define DISTRO "天意U盘维护系统"
  8. !define FILENAME "天意U盘维护系统"
  9. !define VERSION "1.0网络增强测试版"
  10. !define MUI_ICON "AUTORUN.ICO"
  11. RequestExecutionLevel highest
  12. SetCompressor LZMA
  13. CRCCheck On
  14. XPStyle on
  15. ShowInstDetails show
  16. BrandingText "天意U盘维护系统安装器"
  17. CompletedText "安装结束,欢迎使用和收藏本工具! "
  18. InstallButtonText "创 建"
  19. Name "${NAME} ${VERSION}"
  20. OutFile "${FILENAME} ${VERSION}.exe"
  21. !include "nsDialogs.nsh"
  22. !include "MUI2.nsh"
  23. !include "FileFunc.nsh"
  24. !include "WordFunc.nsh" ;DriveList
  25. ; Interface settings
  26. !define MUI_HEADERIMAGE
  27. !define MUI_HEADERIMAGE_BITMAP "usb-logo.bmp"
  28. !define MUI_HEADERIMAGE_BITMAP_NOSTRETCH
  29. !define MUI_HEADERIMAGE_RIGHT
  30. ; Drive page
  31. Var DestDriveTxt
  32. Var DestDrive
  33. Var DestDisk
  34. Var LabelDrivePageText
  35. Var LabelDriveSelect
  36. Var Format
  37. Var FormatMe
  38. Var Hddmode
  39. Var Zipmode
  40. Var HddmodeMe
  41. Var ZipmodeMe
  42. Var Warning
  43. Var Soft
  44. Var Link
  45. Var Links
  46. Var Image
  47. Var hImage
  48. #Page custom SetCustom LeaveCustom
  49. Page custom drivePage

  50. !define MUI_INSTFILESPAGE_COLORS "00FF00 000000"
  51. ; Instfiles page
  52. !define MUI_TEXT_INSTALLING_TITLE $(Install_Title)
  53. !define MUI_TEXT_INSTALLING_SUBTITLE $(Install_SubTitle)
  54. !define MUI_TEXT_FINISH_SUBTITLE $(Install_Finish_Sucess)
  55. !insertmacro MUI_PAGE_INSTFILES
  56. ; Language files
  57. !insertmacro MUI_LANGUAGE "SimpChinese"
  58. LangString DrivePage_Title ${LANG_SIMPCHINESE} "【天意作品】天意U盘维护系统安装器"
  59. LangString DrivePage_Title2 ${LANG_SIMPCHINESE} "先插入您的U盘,然后再打开本软件进行安装。"
  60. LangString DrivePage_Text ${LANG_SIMPCHINESE} "本工具将使您的U盘完美启动。"
  61. LangString DrivePage_Input ${LANG_SIMPCHINESE} "第一步:点击下拉菜单选择要安装本系统的U盘"
  62. LangString Soft_Text ${LANG_SIMPCHINESE} "第二步:选择USB设备启动引导模式。必选。"
  63. LangString WarningPage_Text ${LANG_SIMPCHINESE} "注意:请确保U盘资料已备份。原资料将被完全覆写并不可恢复!"
  64. LangString Install_Title ${LANG_SIMPCHINESE} "安装中 ${DISTRO}"
  65. LangString Install_SubTitle ${LANG_SIMPCHINESE} "请稍后 ${NAME} 安装 ${DISTRO} 到 $DestDisk"
  66. LangString Install_Finish_Sucess ${LANG_SIMPCHINESE} "$\t ${NAME} 已经完成安装${DISTRO}到$DestDisk"
  67. Function .onInit
  68.   InitPluginsDir
  69.   File /oname=$PLUGINSDIR\ad.bmp "ad.bmp" ; 嵌入bmp位图以便后面调用
  70. FunctionEnd
  71. Function drivePage
  72.   !insertmacro MUI_HEADER_TEXT $(DrivePage_Title) $(DrivePage_Title2)
  73.   nsDialogs::Create 1018
  74.   ${If} $DestDrive == ""
  75.   GetDlgItem $6 $HWNDPARENT 1 ; Get next control handle
  76.   EnableWindow $6 0 ; disable next
  77.   ${EndIf}
  78.   ;创建bmp位图
  79. ${NSD_CreateBitmap} 75% 0 20% 100% ""
  80. Pop $Image
  81. ${NSD_SetImage} $Image $PLUGINSDIR\ad.bmp $hImage

  82.   ${NSD_CreateLabel} 0 0 70% 30 $(DrivePage_Text)
  83.   Pop $LabelDrivePageText
  84.   ${NSD_CreateLabel} 0 20 70% 15 $(DrivePage_Input)
  85.   Pop $LabelDriveSelect
  86.   SetCtlColors $LabelDriveSelect /Branding 0000BD
  87.   
  88.   ${NSD_CreateDroplist} 0 40 30% 25 ""
  89.   Pop $DestDriveTxt
  90.   ${NSD_OnChange} $DestDriveTxt db_select.onchange
  91.   ${GetDrives} "FDD" driveList  ; FDD代表移动磁盘,本地磁盘用HDD,所有磁盘用ALL
  92.   ${If} $DestDrive != ""
  93.   ${NSD_CB_SelectString} $DestDriveTxt $DestDrive
  94.   ${EndIf}
  95. ; Add Help Link
  96.   ${NSD_CreateLink} 81% 192 15% 14 "软件更新" ; 创建一个链接地址 85%代表位置横坐标,190代表位置纵坐标,15%代表内容横坐标,14代表内容纵坐标
  97.   Pop $Link
  98.   ${NSD_OnClick} $Link onClickMyLink
  99. ; Format Drive Option
  100.   ${NSD_CreateButton} 32% 38 36% 22 "(可选)FAT32格式化此U盘"
  101.   Pop $Format
  102.   ${NSD_OnClick} $Format FormatIt
  103. ; Soft Label
  104.   ${NSD_CreateLabel} 0 70 70% 15 $(Soft_Text) ;软件内容 0代表位置横坐标,70代表位置纵坐标,70%代表内容横坐标,15代表内容纵坐标
  105.   Pop $Soft
  106.   SetCtlColors $Soft /Branding 0000BD
  107.   
  108. ; 磁盘启动模式选项
  109.   ${NSD_CreateCheckBox} 0 90 36% 15 "HDD启动模式."
  110.   Pop $Hddmode
  111.   ${NSD_Check} $Hddmode
  112.   ${NSD_OnClick} $Hddmode HddmodeIt
  113.   ${NSD_CreateCheckBox} 38% 90 36% 15 "ZIP启动模式."
  114.   Pop $Zipmode
  115.   ${NSD_OnClick} $Zipmode ZipmodeIt
  116. ; Warning Label
  117.   ${NSD_CreateLabel} 0 190 80% 14 $(WarningPage_Text)
  118.   Pop $Warning
  119.   EnableWindow $Format 0
  120.   EnableWindow $Hddmode 0
  121.   EnableWindow $Zipmode 0
  122.   ShowWindow $Warning 0
  123.   GetDlgItem $6 $HWNDPARENT 3
  124.   ShowWindow $6 0 ; Disable Back
  125.   nsDialogs::Show
  126.   ${NSD_FreeImage} $hImage
  127. FunctionEnd

  128. Function onClickMyLink
  129.   Pop $Links ; pop something to prevent corruption
  130.   ExecShell "open" "http://www.winpe.cc"
  131. FunctionEnd

  132. Function db_select.onchange
  133.   Pop $DestDriveTxt
  134.   ${NSD_GetText} $DestDriveTxt $0
  135.   StrCpy $DestDrive "$0"
  136.   StrCpy $DestDisk "$DestDrive" -1
  137.   GetDlgItem $6 $HWNDPARENT 1 ; Get "Next" control handle
  138.   EnableWindow $6 1 ; enable "Next" control
  139.   EnableWindow $Format 1  
  140.   EnableWindow $Hddmode 1
  141.   EnableWindow $Zipmode 1
  142.   ShowWindow $Warning 1
  143.   SetCtlColors $Warning /Branding FF0000
  144.   Call HddmodeIt
  145.   Call ZipmodeIt
  146. FunctionEnd
  147. Function driveList ; 磁盘列表,表示形式为盘符CDE等
  148. SendMessage $DestDriveTxt ${CB_ADDSTRING} 0 "STR:$9"
  149. Push 1
  150. FunctionEnd
  151. ;下面2个方程的意思是:无论用户怎么点击,都必须要选中一个
  152. Function HddmodeIt
  153.   ${NSD_GetState} $Hddmode $HddmodeMe
  154.   
  155.   ${If} $HddmodeMe == ${BST_CHECKED}
  156.   ${NSD_Check} $Hddmode
  157.   StrCpy $HddmodeMe "Yes"
  158.   ${NSD_SetText} $Hddmode "(已选)HDD启动模式"
  159.   ${NSD_Uncheck} $Zipmode
  160.   StrCpy $ZipmodeMe "No"
  161.   ${NSD_SetText} $Zipmode "ZIP启动模式"
  162.   
  163.   ${ElseIf} $HddmodeMe == ${BST_UNCHECKED}
  164.   ${NSD_Uncheck} $Hddmode
  165.   StrCpy $HddmodeMe "No"
  166.   ${NSD_SetText} $Hddmode "HDD启动模式"
  167.   ${NSD_Check} $Zipmode
  168.   StrCpy $ZipmodeMe "Yes"
  169.   ${NSD_SetText} $Zipmode "(已选)ZIP启动模式"
  170.   ${EndIf}
  171. FunctionEnd
  172. Function ZipmodeIt ; Set Format Option
  173.   ${NSD_GetState} $Zipmode $ZipmodeMe
  174.   ${If} $ZipmodeMe == ${BST_CHECKED}
  175.   ${NSD_Check} $Zipmode
  176.   StrCpy $ZipmodeMe "Yes"
  177.   ${NSD_SetText} $Zipmode "(已选)ZIP启动模式"
  178.   ${NSD_Uncheck} $Hddmode
  179.   StrCpy $HddmodeMe "No"
  180.   ${NSD_SetText} $Hddmode "HDD启动模式"
  181.   ${ElseIf} $ZipmodeMe == ${BST_UNCHECKED}
  182.   ${NSD_Uncheck} $Zipmode
  183.   StrCpy $ZipmodeMe "No"
  184.   ${NSD_SetText} $Zipmode "ZIP启动模式"
  185.   ${NSD_Check} $Hddmode
  186.   StrCpy $HddmodeMe "Yes"
  187.   ${NSD_SetText} $Hddmode "(已选)HDD启动模式"
  188.   ${EndIf}
  189. FunctionEnd
  190. Function FormatIt ; Set Format Option这里增加询问框,更加人性化
  191.   Pop $FormatMe
  192.   MessageBox MB_YESNO "格式化U盘可以取回全部空间,继续吗?" IDYES true IDNO false
  193. true:
  194.   Goto next
  195. false:
  196.   MessageBox MB_OK|MB_ICONSTOP "不格式化,退出"
  197.   Abort
  198. next:
  199.   MessageBox MB_YESNO "真的格式化吗?(请确保您的U盘资料已经备份,格式化将擦除U盘资料且不可恢复)" /SD IDYES IDNO false2
  200.   Goto next2
  201. false2:
  202.   MessageBox MB_OK|MB_ICONSTOP "不格式化,退出"
  203.   Abort
  204. next2:
  205.   InitPluginsDir
  206. File /oname=$PLUGINSDIR\fbinst.exe "src\fbinst.exe" ;调用一下src文件夹里面的fbinst.exe用于格式化
  207.   nsExec::ExecToLog '"cmd" /c "echo y|$PLUGINSDIR\fbinst $DestDisk format --raw --force --fat32"'
  208.   MessageBox MB_OK "格式化完成,恢复U盘全部空间。"
  209. FunctionEnd
  210. Function InstallEYes
  211.   InitPluginsDir
  212.   SetOutPath "$PLUGINSDIR"
  213.   File /r "src\*.*" ;文件夹src里面必须包含2个文件,fbinst.exe和你的fba包,在这个例子里名字为ty.fba,下面要相对应名字
  214.   ${If} $HddmodeMe == "Yes"
  215.   DetailPrint "创建HDD模式的引导和复制天意U盘维护系统到 $DestDisk, 请稍后"
  216. ;下面这段请根据您的fba包大小来填写UD扩展分区的大小extended ?m,UD主分区默认大小是8m,否则会出现安装错误。
  217. ;fba包目前使用fbinstool工具比较方便,假如你很掌握fbinst命令,也完全可以使用命令在这里创建fba包然后安装它,写起来比较复杂。
  218.   nsExec::ExecToLog '"cmd" /c "echo y|$PLUGINSDIR\fbinst $DestDisk format --extended 267m --force --align --primary 8m --archive $PLUGINSDIR\ty.fba"'
  219.   DetailPrint "天意U盘维护系统已经安装到$DestDisk的隐藏区占275M"
  220. ${ElseIf} $ZipmodeMe == "Yes"
  221.   DetailPrint "创建Zip模式的引导和复制天意U盘维护系统到 $DestDisk, 请稍后"
  222.   nsExec::ExecToLog '"cmd" /c "echo y|$PLUGINSDIR\fbinst $DestDisk format --extended 267m --force --zip --align --primary 8m --archive $PLUGINSDIR\ty.fba"'
  223.   DetailPrint "天意U盘维护系统zip模式已经安装到$DestDisk的隐藏区占275M"
  224. ${EndIf}
  225. FunctionEnd
  226. Section "Install" main
  227.   Call InstallEYes ;指令安装进程程式
  228.   nsExec::ExecToLog '"cmd" /c "echo y|$PLUGINSDIR\fbinst $DestDisk pack"' ;安装完成后整理碎片
  229. SectionEnd
复制代码
回复

使用道具 举报

11#
发表于 2011-5-1 16:37:55 | 显示全部楼层


附一张效果图。那个自动识别大小功能还没有搞定。
太菜了,没有办法。

继续测试中。
回复

使用道具 举报

12#
发表于 2011-5-1 17:29:11 | 显示全部楼层
原帖由 2010teasiu 于 2011-5-1 17:14 发表
已经修复了几处bug,请看最新的源码发布地址。

在变量里加一行
Var dialog


Function drivePage
  !insertmacro MUI_HEADER_TEXT $(DrivePage_Title) $(DrivePage_Title2)
  nsDialogs::Create 101 ...

不知道加Var dialog
有什么作用?
回复

使用道具 举报

13#
发表于 2011-5-1 17:30:30 | 显示全部楼层
原帖由 yidawpf 于 2011-5-1 16:28 发表
我修改了你的代码。也生成了exe。
但NSIS编译器提示如下:
119961

请问是哪里出了错。是否影响使用?

##这是一个可以安装fba包的u盘启动安装器源码,
##资源包src里面的ty.fba是一个空文件,请用自己的 ...


那位能够帮我把自动识别fba大小加进去。自己试了许多遍搞不定。
回复

使用道具 举报

14#
发表于 2011-5-1 18:03:53 | 显示全部楼层
原帖由 2010teasiu 于 2011-5-1 17:54 发表


你没有那些文件包,当然出错啦。
比如ico文件和名字要一致。。。

那我这个提示是怎么回事呢?
回复

使用道具 举报

15#
发表于 2011-5-4 16:59:48 | 显示全部楼层




来感谢下神雕大侠。在他的源码和指导下,我成功的实现了把FBA安装到移动硬盘功能和自动识别FBA大小功能。

PS:最后一张图提示错误,那是因为我测试安装到硬盘而出现的。
实际上是没有问题的。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-6 11:21

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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