IT天空

 找回密码
 加入我们

手机号码,快捷登录

搜索

[原创] PE下AU3一键恢复源码

[复制链接]
lizhongbo 发表于 2020-3-11 23:30:30 | 显示全部楼层 |阅读模式

#Region ;**** 由 AccAu3Wrapper_GUI 创建指令 ****
#PRE_Icon=161.ico
#PRE_Outfile=GHOSTXP.exe
#PRE_Compression=4
#PRE_UseUpx=y
#PRE_UseX64=n
#PRE_Res_Comment=恒信系统多配置安装选择工具
#PRE_Res_Description=恒信系统多配置安装选择工具,用于多系统安装 作者:恒信电脑
#PRE_Res_Fileversion=1.0.2.1
#PRE_Res_LegalCopyright=版权所有(C)2015-2020 三井子恒信电脑
#PRE_Res_Language=2052
#PRE_Res_requestedExecutionLevel=None#PRE_Res_Field=产品版本|2020.03.10
#EndRegion ;**** 由 AccAu3Wrapper_GUI 创建指令 ****
Dim $x, $i, $CDRom, $i, $Drive, $Flag, $Flagr, $ghostID, $name, $gho
$x = DriveGetDrive("REMOVABLE") ;返回一个含有指定驱动器盘符的数组,数组中的0号元素储存驱动器的数量
If $x = 0 Then
        MsgBox(64, "恒信提示:您没有插入U盘(5秒后自动退出)", "您没有插入U盘,5秒后,我会自杀", 5)
;~ ;Run(@ComSpec&' /c ping 127.0.0.1 -n 1&del /q "'&@ScriptFullPath&'"',@ScriptDir,@SW_HIDE)
        Exit
EndIf
$soft_ini = FileOpen(@ScriptDir & "\GHOSTXP.INI", 0)
If $soft_ini = -1 Then
        MsgBox(16, "错误", '请检查配置文件是否存在!!!') ;@ScriptDir为脚本所在目录
        ProcessClose("netjiance.dll")
        Exit
EndIf
$User = IniRead("config.ini", "配置文件,请勿修改", "公司名称", "")
$QQ = IniRead("config.ini", "配置文件,请勿修改", "QQ", "")
$Email = IniRead("config.ini", "配置文件,请勿修改", "E-mail", "")
$label = IniRead("config.ini", "配置文件,请勿修改", "varCD", "")
$SOFT = IniRead("config.ini", "配置文件,请勿修改", "SOFT", "")
$Ghost32 = IniRead("GHOSTXP.INI", "ghost32", "ghost32path", "")

If $Flag = 2 Then
        Exit
EndIf
If $CmdLine[0] < 1 Or StringInStr($CmdLineRaw, "-setup") Or StringInStr($CmdLineRaw, "/setup") Then ;默认没有命令行参数的运行
        $name = IniRead("GHOSTXP.INI", "setup", "name", "")
        $gho = IniRead("GHOSTXP.INI", "setup", "ghofile", "")
        ;Exit
EndIf
If StringInStr($CmdLineRaw, "-setup1") Or StringInStr($CmdLineRaw, "/setup1") Then ;在传递参数1的时候执行的文件

        $name = IniRead("GHOSTXP.INI", "setup1", "name", "")
        $gho = IniRead("GHOSTXP.INI", "setup1", "ghofile", "")
EndIf
If StringInStr($CmdLineRaw, "-setup2") Or StringInStr($CmdLineRaw, "/setup2") Then ;在传递参数2的时候执行的文件

        $name = IniRead("GHOSTXP.INI", "setup2", "name", "")
        $gho = IniRead("GHOSTXP.INI", "setup2", "ghofile", "")
EndIf


If StringInStr($CmdLineRaw, "?") Then ;在传递参数?的时候执行的文件
        MsgBox(64, "帮助", "本程序可带参数运行,以调用不同的GHO镜像方便多合一盘,每个参数对应INI中同名的字段。" & @CR & "运行GHOSTXP -SETUP1或GHOSTXP /SETUP1 则调用GHOSTXP.INI中的[SETUP1]中的各项")
        Exit
EndIf

FileWrite(@TempDir & "\DsptW.exe", DsptW())
SplashTextOn("", "正在获取分区,请稍候...", 250, 38, -1, -1, 1, "", 5)
RunWait(@ComSpec & " /C " & @TempDir & "\DsptW.exe /A /Pdr  >" & @TempDir & "\Part.Txt", @TempDir, @SW_HIDE)
FileDelete(@TempDir & "\DsptW.exe")
$IniFile = @TempDir & "\Part.Txt"
$Ini = @TempDir & "\Ghost.ini"
FileDelete($Ini)
FileWriteLine($Ini, "[HardDisk]")


For $i = 3 To 26
        $ReadFile = FileReadLine($IniFile, $i) ;第三行开始读取
        If $ReadFile = '' Then ExitLoop ;空退出
        If StringMid($ReadFile, 2, 1) = ":" Then ;$ReadFile第2字符为:
                $strExt = StringLeft($ReadFile, 9) ;返回左起8个字符
                ;MsgBox(1,"系统安装",$strExt);输出看一下什么
                $strExt = StringStripWS($strExt, 2) ;删去字符串中的"空白符".
                $strExt = StringRegExpReplace($strExt, '\s', '=') ;替换': '为'='
                FileWriteLine($Ini, $strExt)
        EndIf
        If StringMid($ReadFile, 9, 1) = "A" Then ;$ReadFile第9字符为:
                $strExt0 = StringLeft($ReadFile, 2) ;返回左起2个字符,如C:
                $strExt1 = StringMid($ReadFile, 1, 10) ;确定一下是激活分区
                $strExt2 = StringMid($strExt1, 4, 5) ;ghost备份还原用的分区ID
                $strExt2 = StringStripWS($strExt2, 2) ;删去字符串中的"空白符".
                $ghostID = $strExt2
                ;MsgBox(1,"系统安装",$strExt1);输出看一下什么

                ;FileWriteLine(@ScriptDir & "\Activation.ini", "strExt1="&$strExt1&@LF&@LF&"激活分区ID="&$strExt2)
                ;FileWriteLine(@TempDir & "\Activation.ini", $strExt0)
                ;Local $pID =ShellExecute (@ScriptDir & "\Activation.ini");运行一个文件并返回pid
                ;ProcessWaitClose($pID);等待这个进程结束
                ;FileDelete(@ScriptDir & "\Activation.ini");这个进程结束后就删除文件
        EndIf
Next
SplashOff() ;关闭闪屏
FileDelete(@TempDir & "\DsptW.exe")
FileDelete(@TempDir & "\Ghost.ini")
FileDelete(@TempDir & "\Activation.ini")
;DirRemove(@TempDir & "\IMAGE", 1)

$Flag = MsgBox(1, "系统安装", "本操作将删除原C盘数据,请确认硬盘已分区并备份好了原C盘数据!" & @CR & @CR & "             确认要安装" & $name & "到C盘吗?")

If $Flag = 2 Then
        Exit
EndIf
;----------------遍历所有盘,除ABC盘寻找ghost.gho文件----这个通用性强可以搜索全盘指定目录下的gho文件---------------------------------------------------------------------------------------
For $i = 68 To 90 Step 1;遍历所有盘,除ABC盘
        $Drive = Chr($i)
        If StringMid($gho, 1, 1) = "\" Then;判断配置文件的路径是否含有\号
        If FileExists($Drive & ":" & $gho) Then;配置文件还有\号,搜索
                $CDRom_gho = $Drive & ":"&$gho
                ;MsgBox(1,"遍历所有盘,除ABC盘带\寻找gho文件",$CDRom_gho)
                ExitLoop
        Else
                ;MsgBox(4096,  "遍历所有盘,除ABC盘寻找gho文件", $Drive1 &"文件不存在"&$gho)
                ;ExitLoop

        EndIf
        Else
        If FileExists($Drive & ":\" & $gho) Then;配置文件不含有\的搜索
                $CDRom_gho = $Drive & ":\"&$gho
                ;MsgBox(1,"遍历所有盘,除ABC盘不带\寻找gho文件",$CDRom_gho)
                ExitLoop
        Else
                ;MsgBox(4096,  "遍历所有盘,除ABC盘寻找gho文件", $Drive1 &"文件不存在"&$gho)
                ;ExitLoop

        EndIf

        EndIf
Next


#CS
;-----这个不插U盘代码会出错???-------------遍历所有U盘寻找ghost.gho文件----这个可以只能是做专用系统;因为不能搜索全盘的gho文件------------------------------------------------------------
$x = DriveGetDrive("REMOVABLE") ;返回一个含有指定驱动器盘符的数组,数组中的0号元素储存驱动器的数量
For $l = 1 To $x[0] ;遍历所有U盘
If FileExists($x[$l] & "\" & $gho) Then;注意加上\号的,不论给定路径头部是否含有\,都能找到,不加会出错
If StringMid($gho, 1, 1) = "\" Then;判断配置文件的路径是否含有\号
$CDRom_gho=$x[$l]& $gho
MsgBox(1,"遍历所有U盘带\寻找gho文件",$x[$l] &  $gho)
Else
$CDRom_gho=$x[$l]& "\"& $gho
MsgBox(1,"遍历所有U盘不带\寻找gho文件",$x[$l] & "\"&  $gho)
EndIf
ExitLoop
Else
        MsgBox(4096,  "遍历所有U盘寻找gho文件", $x[$l] &"盘下不存在文件"&$gho)
EndIf
Next
;----------------------遍历所有盘,除ABC盘寻找ghost32.exe文件----这个可以使用,因为只是工具而已,与做系统无关------------------------------------------------------------------------------------------------------------------


#CE



If StringMid($Ghost32, 2, 1) = ":" Then ; 检测是否为据对路径(X:)   第2位置的1个字符为:
           If FileExists($Ghost32) Then;带有绝对路径的(X:\xxxx)文件存在,保持原有路径
  ghost_sysyem();文件存在就跳转到这里处理文件
  ;MsgBox(4096,  $Ghost32, "文件存在")
        Else;绝对路径下没有找到文件,则
   MsgBox(16, "Error", "未发现配置文件指定的GHOST主程序!");已经给定了,绝对路径,找不到,只能退出了
   exit;退出
   EndIf
   Else;没有绝对路径(\xxx),否则,遍历所有硬盘分区寻找  Ghost32

        For $i = 68 To 90 Step 1 ;计次循环23次,对应字母 Z-D
        $Drive = Chr($i);驱动器循环变量Z-D

        If StringMid($Ghost32, 1, 1) = "\" Then;判断配置文件的路径是否含有\号
        If FileExists($Drive & ":" & $Ghost32) Then;遍历所有硬盘分区寻找  Ghost32
        $Ghost32 = $Drive & ":" & $Ghost32;找到了,就标记下,一路寻找的路径吧
        ;MsgBox(1,"遍历所有盘,除ABC盘带\寻找$Ghost32文件",$Ghost32)
        ;MsgBox(1,"老大", $Drive & ":盘     "&"文件纯在!!!")
        ghost_sysyem()


        ExitLoop;找到了要找的,那就跳出循环吧
        Else; 我穿越了人山人海,和所有硬盘分区,还是没能找到你,,,Ghost32   咋办呢???
    ;MsgBox(1,"老大", $Drive & ":盘     "&"文件不纯在啊!!!")
EndIf
Else
If FileExists($Drive & ":\" & $Ghost32) Then;配置文件不含有\的搜索
$Ghost32 = $Drive & ":\" & $Ghost32;找到了,就标记下,一路寻找的路径吧
;MsgBox(1,"遍历所有盘,除ABC盘不带\寻找Ghost32文件",$CDRom_gho)
ghost_sysyem()
Else
EndIf
EndIf
Next

EndIf


If StringMid($ghostID, 1, 1) <> "1" Then ;判断是否为第一块硬盘
$Flagr1=MsgBox(1,"=警告硬盘的ID错误=", "Ghost32和 gho文件的路径:"&@LF &$Ghost32&@LF &$CDRom_gho&@LF &"您要安装系统的盘符是:"&@LF&"                                         "&$strExt0&"盘    ID="&StringMid($ghostID, 1, 1)&":"&StringMid($ghostID, 3, 1)& @CR &"请核对"&$strExt0&"盘,是否需要安装系统"&@CR&"误操作可能会导致数据丢失哦!!" &@CR &"                      确定开始,取消退出")

If $Flagr1=2 Then
Exit
ElseIf $Flagr1=1 Then
go_ghost_system()
EndIf
EndIf




Func ghost_sysyem()
If StringMid($ghostID, 1, 1) = "1" Then ;判断是否为第一块硬盘
$Flagr11=MsgBox(1,"请注意:"," Ghost32和 gho文件的路径:"&@LF &$Ghost32&@LF &$CDRom_gho&@LF &"您要安装系统的盘符是:"&@LF&"                                         "&$strExt0&"盘    ID="&StringMid($ghostID, 1, 1)&":"&StringMid($ghostID, 3, 1)& @CR &"请核对"&$strExt0&"盘,是否需要安装系统"&@CR&"误操作可能会导致数据丢失哦!!" &@CR &"                      确定开始,取消退出")
If $Flagr11=2 Then
Exit
ElseIf $Flagr11=1 Then
go_ghost_system()
EndIf
EndIf
EndFunc ;==>ghost_sysyem


Func go_ghost_system()
If FileExists($CDRom_gho) Then
        FileWriteLine(@ScriptDir & "\ghost.ini",  $Ghost32&" -nousb -clone,mode=pload,src=" & $CDRom_gho&":1,dst="& $ghostID &" -crcignore -sure -fx")
        If FileExists($Ghost32) And FileExists($CDRom_gho) Then
                ;MsgBox(1,"GHOST32.exe文件和gho文件路径", "在您U盘发现ghost32和gho文件的路径:"&@LF &$Ghost32&@LF &$CDRom_gho)


                ToolTip(@CR & " 正在执行恢复" & $name & "到C盘,请稍候... " &@CR &" ", @DesktopWidth - 260, @DesktopHeight - 120)
                GUICtrlSetColor(-1, 0x0000FF)
                ;Local $ppID = Run($CDRom  &$Ghost32 )

                Local $ppID = Run($Ghost32 & " -nousb -clone,mode=pload,src=" & $CDRom_gho & ":1,dst=" & $ghostID & " -crcignore -sure -fx")
                ProcessWaitClose($ppID)
                ToolTip("电脑将在10秒后重启!!")
                $Flagr = MsgBox(1, "系统安装", "系统文件复制完成,电脑将在10秒后重启", 10)
                If $Flagr = 2 Then
                        Exit
                EndIf

                ;MsgBox(1,"系统安装","真要重启电脑了",5)
                _Restart()
                ;_WinPE()
            ElseIf Not FileExists($Ghost32) Then
                MsgBox(16, "Error", "未发现配置文件指定的GHOST主程序!")
                Exit
        EndIf
Else
        MsgBox(16, "Error", "未发现" & $CDRom_gho& "镜像文件!")
        Exit
EndIf
EndFunc   ;==>ghost_sysyem

Func _Restart()
$a=@OSVersion
Select
        Case $a="WIN_XP"
                 Run(@ComSpec & " /c " & 'PECMD.EXE SHUT R', "", @SW_HIDE)
        Case $a="WIN_XPe"
                Run(@ComSpec & " /c " & 'PECMD.EXE SHUT R', "", @SW_HIDE)
        Case $a="WIN_10"
                Shutdown(6)
        Case $a="WIN_81"
                Shutdown(6)
        Case $a="WIN_8"
                Shutdown(6)
        Case $a="WIN_7"
                Shutdown(6)
EndSelect
EndFunc

#CS
Func _WinPE()
             Local $ram = 'ramdisk(0)'
             RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MiniNT", "")
             If @error = 1 Then
                     If RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control", "SystemBootDevice") = $ram Then Return 1
                     Return 0
            Else
                     Return 1
            EndIf
    EndFunc


   $a=@OSVersion
Select
        Case $a="WIN_XP"
                 Run(@ComSpec & " /c " & 'PECMD.EXE SHUT R', "", @SW_HIDE)
        Case $a="WIN_XPe"
                Run(@ComSpec & " /c " & 'PECMD.EXE SHUT R', "", @SW_HIDE)
        Case $a="WIN_10"
                Shutdown(6)
        Case $a="WIN_81"
                Shutdown(6)
        Case $a="WIN_8"
                Shutdown(6)
        Case $a="WIN_7"
                Shutdown(6)
EndSelect
                If _WinPE() = 1 Then Shutdown(2)
                     Exit

#CE




Func DsptW()
                   ;由于篇幅限制此次代码加贴补上
        EndFunc   ;==>DsptW

-----------------以下是配置文件--------------------------------------------------------------------------------


最近访问 头像模式 列表模式
Skyfree 发表于 2020-3-12 14:57:10 | 显示全部楼层

活跃 265198| 技术 1412| 互助 1808| 钻石 30914

#PRE_ 开头一看就是远古代码了

点评

S大,这个主要是优启通U盘操作系统,桌面下调用U盘下gho文件安装系统用的,原来是调用别人的,现在那个程序不支持调用方式,所以没办法,自己弄了一个!代码东拼西凑的有点乱哦!  详情 回复 发表于 2020-3-12 22:44
那只是文件头部,我复制的哦,不代表代码哦  详情 回复 发表于 2020-3-12 22:39
心語ゾ 发表于 2020-3-12 16:12:10 | 显示全部楼层

活跃 6724| 技术 0| 互助 0| 钻石 10

老大说了是远古代码 ,反正我是看不懂的
 楼主| lizhongbo 发表于 2020-3-12 22:39:29 | 显示全部楼层

活跃 694| 技术 0| 互助 0| 钻石 0

Skyfree 发表于 2020-3-12 14:57
#PRE_ 开头一看就是远古代码了

那只是文件头部,我复制的哦,不代表代码哦
 楼主| lizhongbo 发表于 2020-3-12 22:44:49 | 显示全部楼层

活跃 694| 技术 0| 互助 0| 钻石 0

Skyfree 发表于 2020-3-12 14:57
#PRE_ 开头一看就是远古代码了

S大,这个主要是优启通U盘操作系统,桌面下调用U盘下gho文件安装系统用的,原来是调用别人的,现在那个程序不支持调用方式,所以没办法,自己弄了一个!代码东拼西凑的有点乱哦!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

lizhongbo

694

活跃

0

技术

0

互助
签到任务
最火的业界新闻
  • 小米Wi-Fi 6路由新ROM内测:高通6核芯片性
  • 华为P40系列国行版今晚发布:线下售价提前
  • 多家终端厂商共同宣布5G消息6月商用:可发
  • 中国“5G元年”:1千多家相关公司,十年间
  • 刘强东卸任京东旗下公司经理一职 2020年已
  • [图]对标iPad Pro 三星近期有望推出12.4吋/
  • 三大运营商联合行动:传统短信迎大升级 推
  • 以太网联盟宣布800Gbe规范 1秒钟传输100GB
  • NVIDIA入门笔记本显卡终于上图灵 支持PCIe
  • 小新Pro 13 2020新款开卖:2.5K全面屏 配MX
炫酷的硬件Show
  • 振华SUPER FLOWER 铜皇450W 铜牌电源
  • 比小更小,Mini-STX装机
  • 华擎X99E-ITX + 银欣ML06 装机记
  • 最强双路泰坦硬管水冷 制作流程
  • 银欣FT02,双路E5工作站
  • 迟到的定制机箱小钢炮清理灰尘
  • 乔思伯UMX1 Plus,小巧的家用综合主机
  • 分体水冷第二弹-Inwin 805 infinity
  • 第一次DIY硬管水冷~~
  • 樱桃MX6.0 青轴 机械键盘 开箱
有趣的美图分享
  • 没墨水打出一张黑纸
  • 没头脑和不高兴
  • 在家办公的某国外新闻主播
  • 唱个歌怎么又哭又流鼻涕的?
  • 奇怪的感觉
  • 我的现状
  • 我怀疑这是在搞我
  • 在家第二十天
  • 就是我了
  • 在大学里都学到了什么?
关注官方微信
快速回复 返回顶部 返回列表