Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
- #AutoIt3Wrapper_Outfile=repackwim.exe
- #AutoIt3Wrapper_Icon=repackwim.ico
- #AutoIt3Wrapper_Compression=4
- #AutoIt3Wrapper_UseAnsi=y
- #AutoIt3Wrapper_Res_Comment=
- #AutoIt3Wrapper_Res_Description=repackwim.exe
- #AutoIt3Wrapper_Res_Fileversion=4.0.0.0
- #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n
- #AutoIt3Wrapper_Res_LegalCopyright=AZJIO
- #AutoIt3Wrapper_Res_Language=1049
- #AutoIt3Wrapper_Run_Au3check=n
- #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
- ; @AZJIO 23.01.2011 AutoIt3 v3.2.12.1
- #NoTrayIcon
- #RequireAdmin
- #Include <UserGUI.au3>
- #include <StaticConstants.au3>
- #include <WindowsConstants.au3>
- #include <wimgapi.au3>
- #include <FileOperations.au3>
- ; #include <GUIConstantsEx.au3>
- ; En
- $LngTitle = 'Repack boot.wim v4.0'
- $LngAbout = 'About'
- $LngVer = 'Version'
- $LngSite = 'Site'
- $LngCopy='Copy'
- $LngMsg1 = 'Message'
- $LngMsg3 = 'Install the driver wimfltr.sys?'
- $LngDad = 'drag-and-drop'
- $LngPathW = 'Path wim'
- $LngPathA = 'Path Update'
- $LngTmp = 'Path Tmp'
- $LngTmpH = 'To avoid exceeding the allowable' & @CRLF & 'length of symbols in the path it is recommended' & @CRLF & 'to specify a folder in the root'
- $LngPs = 'pause before completing'
- $LngPsH = 'A pause gives the opportunity to make changes manually'
- ; $LngSv = 'Save settings'
- $LngNR = 'Do not mount the registry hives'
- $LngNRH = 'If you want to preserve the original registry'
- $LngBt = 'Boot'
- $LngBtH = 'For repacking programs'
- $LngUpd = 'Update'
- $LngSb = 'Statusbar'
- $LngErr = 'Error'
- $LngMsg4 = 'Missing file'
- $LngMsg5 = 'Missing folder'
- $LngMsg6 = 'The wim-file label is not found. Without a label' & @CRLF & 'it is impossible to extract a wim-file.'
- $LngMsg7 = 'Can not open file.'
- $LngSb1 = 'Delete the temporary folder "tmp"'
- $LngSb2 = 'Extraction'
- $LngSb3 = 'to a temporary folder "tmp"'
- $LngSb4 = 'Copy the update files from a folder "root"'
- $LngSb5 = 'Formed base5.reg and base4.reg'
- $LngMsg8 = 'not mount'
- $LngMsg9 = 'mount'
- $LngMsg10 = 'Pause for manual editing before packing.' & @CRLF & @CRLF & '"Continue" - packing.' & @CRLF & '"Repeat" - mount the registry hives, if not mounts.' & @CRLF & '"Cancel" - Exit.'
- $LngMsg11 = 'Pause for manual editing before packing.' & @CRLF & @CRLF & '"Yes" - packing.' & @CRLF & '"No" - Exit.'
- $LngMsg12 = 'Missing folder "tools".'
- ; $LngSb6 = 'Formed base4.reg'
- $LngSb7 = 'Mount the registry hives'
- $LngSb8 = 'The opening of full access to the registry hive'
- $LngSb9 = 'Adding data to the registry LiveCD.'
- $LngSb10 = 'Disable registry hives'
- $LngSb11 = 'Runs packing in'
- $LngSb12 = 'Wait for the implementation.'
- $LngSb13 = 'Done! Size:'
- $LngSb14 = 'пост-обработка - modify.cmd'
- $LngSbMb = 'Mb'
- $LngOpD1 = 'Choice wim'
- $LngOpD2 = 'boot-wim'
- $LngOpF = 'Choice a folder with updatings'
- $LngOFT = 'Choice temporary folder'
- $LngMsg13 = '- file not found.'
- $LngScrollAbt = 'The tool is designed' & @CRLF & _
- 'for repacking the boot.wim using the update.' & @CRLF & @CRLF & _
- 'The update contains three directories: ' & @CRLF & _
- '1. root - the contents of this directory copied to ' & _
- 'the root boot.wim with replacement ' & @CRLF & _
- '2. reg - contains the reg-files imported into the ' & _
- 'registry LiveCD ' & @CRLF & _
- '3. del - contains two types of lists removal of ' & _
- 'boot.wim. ' & @CRLF & @CRLF & _
- 'Repacking process can be seen in the status ' & _
- 'bar. Recommended to pause during ' & _
- 'repacking, to make sure mounted registry ' & _
- 'hives.' & @CRLF & @CRLF & _
- 'The utility is written in AutoIt3' & @CRLF & _
- 'autoitscript.com'
- $Lang_dll = DllOpen("kernel32.dll")
- $UserIntLang=DllCall ( $Lang_dll, "int", "GetUserDefaultUILanguage" )
- If Not @error Then $UserIntLang=Hex($UserIntLang[0],4)
- DllClose($Lang_dll)
- ; Ru
- ; если русская локализация, то русский язык
- If $UserIntLang = 0419 Then
- $LngTitle = 'Repack boot.wim v4.0'
- $LngAbout = 'О программе'
- $LngVer = 'Версия'
- $LngSite = 'Сайт'
- $LngCopy='Копировать'
- $LngMsg1 = 'Сообщение'
- $LngMsg3 = 'Установить драйвер wimfltr.sys?'
- $LngDad = 'используйте drag-and-drop'
- $LngPathW = 'Путь к загрузочному wim-файлу'
- $LngPathA = 'Путь к папке с обновлениями'
- $LngTmp = 'Временный каталог'
- $LngTmpH = "Во избежание превышение допустимой" & @CRLF & "длинны символов в пути рекомендуется" & @CRLF & "указать папку в корне диска"
- $LngPs = 'сделать паузу перед окончательной сборкой'
- $LngPsH = "Пауза даёт возможность" & @CRLF & "внести изменения вручную"
- ; $LngSv = 'Сохранить установки'
- $LngNR = 'Не подключать кусты реестра'
- $LngNRH = "Если требуется сохранить оригинал реестра," & @CRLF & "например в томах."
- $LngBt = 'Загрузочный'
- $LngBtH = 'Снять галку при перепаковке программ.'
- $LngUpd = 'Обновить'
- $LngSb = 'Строка состояния'
- $LngErr = 'Мелкая ошибка'
- $LngMsg4 = 'Отсутствует файл'
- $LngMsg5 = 'Отсутствует папка'
- $LngMsg6 = 'Не найдена метка wim-файла.' & @CRLF & 'Без метки извлечь wim-файл невозможно.'
- $LngMsg7 = 'Не возможно открыть файл.'
- $LngSb1 = 'Удаление временной папки tmp'
- $LngSb2 = 'Извлечение'
- $LngSb3 = 'во временную папку tmp'
- $LngSb4 = 'Копируем файлы обновления из папки root'
- $LngSb5 = 'Формируется base5.reg и base4.reg'
- $LngMsg8 = 'не подключен'
- $LngMsg9 = 'подключен'
- $LngMsg10 = 'Пауза для ручной правки перед упаковкой.' & @CRLF & @CRLF & '"Продолжить" - упаковка.' & @CRLF & '"Повторить" - подключить реестр, если не подключен.' & @CRLF & '"Отмена" - закрыть программу.'
- $LngMsg11 = 'Пауза для ручной правки перед упаковкой.' & @CRLF & @CRLF & '"Да" - упаковка.' & @CRLF & '"Нет" - закрыть программу.'
- $LngMsg12 = 'Отсутствует каталог tools.'
- ; $LngSb6 = 'Формируется base4.reg'
- $LngSb7 = 'Подключаем кусты реестра'
- $LngSb8 = 'Открытие полного доступа к кустам реестра'
- $LngSb9 = 'Добавление данных в реестр LiveCD.'
- $LngSb10 = 'Отключаем кусты реестра'
- $LngSb11 = 'Выполняется упаковка в'
- $LngSb12 = 'Дождитесь выполнения.'
- $LngSb13 = 'Готово !!! Размер:'
- $LngSb14 = 'пост-обработка - modify.cmd'
- $LngSbMb = 'Мб'
- $LngOpD1 = 'Выбор wim-файла'
- $LngOpD2 = 'Загрузочный образ'
- $LngOpF = 'Указать папку с обновлениями'
- $LngOFT = 'Указать временную папку'
- $LngMsg13 = '- файл не найден, нет гарантии выполнения операций.'
- $LngScrollAbt = 'Утилита предназначена' & @CRLF & _
- 'для перепаковки загрузочных boot.wim ' & _
- 'файлов с использованием апдейта.' & @CRLF & @CRLF & _
- 'Апдейт содержит три каталога: ' & @CRLF & _
- '1. root - содержимое этого каталога ' & _
- 'копируется в корень boot.wim с заменой ' & @CRLF & _
- '2. reg - содержит reg-файлы ' & _
- 'импортируемые в реестр LiveCD ' & @CRLF & _
- '3. del - содержит два типа списков ' & _
- 'удаления из boot.wim. ' & @CRLF & @CRLF & _
- 'Процесс перепаковки можно видеть в ' & _
- 'строке состояния. Рекомендуется ' & _
- 'использовать паузу во время ' & _
- 'перепаковки, для уверенности ' & _
- 'подключения кустов реестра.' & @CRLF & @CRLF & _
- 'Утилита написана на AutoIt3' & @CRLF & _
- 'autoitscript.com'
- EndIf
- Global $inputwim0, $inputzip0, $inputtmp0, $iniw, $reestr0, $boot0
- $i386Win7 = ''
- $sizewim = ''
- Global $Stack[50], $Stack1[50], $aDel
- Global $Ini = @ScriptDir & '\rewim.ini' ; путь к rewim.ini
- FileChangeDir(@ScriptDir)
- ; проверка существования файлов-утилит
- $tools=@ScriptDir & '\tools'
- $aTools=StringSplit('wimlib-imagex.exe|libwim-15.dll', '|')
- $err=0
- For $i = 1 to $aTools[0]
- If Not FileExists($tools&'\'&$aTools[$i]) Then
- $err=$i
- ExitLoop
- EndIf
- Next
- If $err>0 Then MsgBox(0, $LngMsg1, $aTools[$err]&' '&$LngMsg13)
- ;Проверка существования rewim.ini
- If Not FileExists($Ini) Then
- $sText = _
- '[path]' & @CRLF & _
- 'path1=' & @CRLF & _
- 'path2=' & @CRLF & _
- 'path3=' & @CRLF & _
- 'check=0' & @CRLF & _
- 'reestr=0' & @CRLF & _
- 'boot=1' & @CRLF & _
- 'Font=12' & @CRLF & _
- 'pe_cu_df=PE_CU_DF' & @CRLF & _
- 'pe_lm_sw=PE_LM_SW' & @CRLF & _
- 'pe_sy_hi=PE_SY_HI' & @CRLF
- $hFile = FileOpen($Ini, 2)
- FileWrite($hFile, $sText)
- FileClose($hFile)
- EndIf
- ;считываем rewim.ini
- $path1 = IniRead($Ini, "path", "path1", "")
- $path2 = IniRead($Ini, "path", "path2", "")
- $path3 = IniRead($Ini, "path", "path3", "")
- $check = IniRead($Ini, "path", "check", "0")
- ; $save = IniRead($Ini, "path", "save", "1")
- $reestr = IniRead($Ini, "path", "reestr", "0")
- $boot = IniRead($Ini, "path", "boot", "1")
- $PE_CU_DF = IniRead($Ini, "path", "pe_cu_df", "PE_CU_DF")
- If StringRegExpReplace($PE_CU_DF, '\w+', '') Then $PE_CU_DF = 'PE_CU_DF'
- $PE_LM_SW = IniRead($Ini, "path", "pe_lm_sw", "PE_LM_SW")
- If StringRegExpReplace($PE_LM_SW, '\w+', '') Then $PE_LM_SW = 'PE_LM_SW'
- $PE_SY_HI = IniRead($Ini, "path", "pe_sy_hi", "PE_SY_HI")
- If StringRegExpReplace($PE_SY_HI, '\w+', '') Then $PE_SY_HI = 'PE_SY_HI'
- $iniFont = Number(IniRead($Ini, 'path', 'Font', '0'))
- If $iniFont < 7 Or $iniFont > 20 Then $iniFont = 9
- ; $Win7= IniRead ($Ini, "path", "Win7", "0")
- ; установка драйвера, если отсутствует
- ; If Not FileExists(@WindowsDir & '\system32\drivers\WimFltr.sys') And MsgBox(4, $LngMsg1, $LngMsg3)= "6" Then RunWait(@ComSpec & ' /C ' & @WindowsDir & '\system32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 ' & $tools & '\wimfltr.inf', '', @SW_HIDE)
- $Gui = GUICreate($LngTitle, 500, 348, -1, -1, -1, 0x00000010) ; размер окна
- If $iniFont Then GUISetFont($iniFont)
- $About = GUICtrlCreateButton("@", 500 - 21, 2, 18, 20)
- GUICtrlCreateLabel($LngDad, 150, 3, 260, 18)
- GUICtrlCreateLabel($LngPathW, 20, 38, 400, 17)
- $inputwim = GUICtrlCreateInput("", 20, 55, 436, 22)
- GUICtrlSetState(-1, 8)
- $filewim = GUICtrlCreateButton("...", 455, 55, 26, 23)
- GUICtrlSetFont(-1, 16)
- If $path1 <> '' Then GUICtrlSetData($inputwim, $path1)
- GUICtrlCreateLabel($LngPathA, 20, 93, 400, 17)
- $inputzip = GUICtrlCreateInput("", 20, 110, 436, 22)
- GUICtrlSetState(-1, 8)
- $filezip = GUICtrlCreateButton("...", 455, 110, 26, 23)
- GUICtrlSetFont(-1, 16)
- If FileExists(@ScriptDir & '\Update') And $path2 = '' Then GUICtrlSetData($inputzip, @ScriptDir & '\Update')
- If $path2 <> '' Then GUICtrlSetData($inputzip, $path2)
- GUICtrlCreateLabel($LngTmp, 20, 148, 400, 17)
- $inputtmp = GUICtrlCreateInput("", 20, 165, 436, 22)
- GUICtrlSetState(-1, 8)
- GUICtrlSetTip(-1, $LngTmpH)
- If $path3 = '' Then
- GUICtrlSetData($inputtmp, @ScriptDir)
- Else
- GUICtrlSetData($inputtmp, $path3)
- EndIf
- $filetmp = GUICtrlCreateButton("...", 455, 165, 26, 23)
- GUICtrlSetFont(-1, 16)
- ; чекбоксы
- $checkpause = GUICtrlCreateCheckbox($LngPs, 20, 195, 360, 20)
- GUICtrlSetTip(-1, $LngPsH)
- If $check = '1' Then GUICtrlSetState($checkpause, 1)
- ; $checksave = GUICtrlCreateCheckbox($LngSv, 20, 215, 255, 20)
- ; If $save = '1' Then GUICtrlSetState($checksave, 1)
- $checkre = GUICtrlCreateCheckbox($LngNR, 20, 215, 360, 20)
- GUICtrlSetTip(-1, $LngNRH)
- If $reestr = '1' Then GUICtrlSetState($checkre, 1)
- $checkboot = GUICtrlCreateCheckbox($LngBt, 20, 235, 360, 20)
- GUICtrlSetTip(-1, $LngBtH)
- If $boot = '1' Then GUICtrlSetState($checkboot, 1)
- ; $checkWin7=GUICtrlCreateCheckbox ("Win7", 290,235,190,20)
- ; GUICtrlSetTip(-1, "Win7=Windows, XP=i386.")
- ; If $Win7='1' Then GuiCtrlSetState($checkWin7, 1)
- $Upd = GUICtrlCreateButton($LngUpd, 370, 270, 110, 45)
- GUICtrlSetFont(-1, 14)
- $Label000 = GUICtrlCreateLabel($LngSb, 10, 328, 380, 20, 0xC)
- $LabelMb = GUICtrlCreateLabel('', 392, 320, 80, 28, 0xC)
- GUICtrlSetFont(-1, 15, 700)
- GUICtrlSetColor(-1, 0xff0000)
- GUISetState()
- OnAutoItExitRegister("_MyExit2")
- While 1
- Switch GUIGetMsg()
- Case $About
- _About()
- Case -13 ;событие приходящееся на drag-and-drop
- If @GUI_DropId = $inputwim Then GUICtrlSetData($inputwim, @GUI_DragFile)
- If @GUI_DropId = $inputzip Then GUICtrlSetData($inputzip, @GUI_DragFile)
- If @GUI_DropId = $inputtmp Then GUICtrlSetData($inputtmp, @GUI_DragFile)
- Case $Upd
- $Time1=@MIN&':'&@SEC
- $Time = TimerInit()
- GUICtrlSetData($LabelMb, '')
- GUICtrlSetColor($LabelMb, 0x000000)
- _ReadGUI()
- If Not FileExists($inputwim0) Then
- MsgBox(0, $LngErr, $LngMsg4 & ' ' & $inputwim0, 0, $Gui)
- ContinueLoop
- EndIf
- If Not FileExists($inputzip0) Then
- MsgBox(0, $LngErr, $LngMsg5 & ' ' & $inputzip0, 0, $Gui)
- ContinueLoop
- EndIf
- If Not FileExists($inputtmp0) Then
- MsgBox(0, $LngErr, $LngMsg5 & ' ' & $inputtmp0, 0, $Gui)
- ContinueLoop
- EndIf
- GUICtrlSetState($Upd, 128)
- ; If GUICtrlRead ($checkWin7)=1 Then
- ; $Win70=1
- ; $i386Win7='Windows'
- ; Else
- ; $Win70=0
- ; $i386Win7='i386'
- ; EndIf
- If $inputtmp0 = '' Or Not FileExists($inputtmp0) Then $inputtmp0 = @TempDir
- GUICtrlSetData($Label000, $LngSb1)
- If FileExists($inputtmp0 & '\tmp') Then DirRemove($inputtmp0 & '\tmp', 1)
- DirCreate($inputtmp0 & '\tmp\base_wim')
- Sleep(900)
- If Not FileExists($tools) Then
- MsgBox(0, $LngErr, $LngMsg12, 0, $Gui)
- GUICtrlSetState($Upd, 64)
- ContinueLoop
- EndIf
- ; Вытаскиваем метку WIM-файла
- $labelwim0 = _GetLabel()
- If @error Then
- MsgBox(0, $LngErr, $LngMsg6, 0, $Gui)
- GUICtrlSetData($Label000, '')
- GUICtrlSetState($Upd, 64)
- ContinueLoop
- EndIf
- ; конец "Вытаскиваем метку WIM-файла"
- ; Распаковка WIM
- $aPathwim = StringRegExp($inputwim0, "(^.*)\\(.*)$", 3)
- GUICtrlSetData($Label000, $LngSb2 & ' ' & $aPathwim[1] & ' ' & $LngSb3)
- ; команда распаковки WIM-файла
- ShellExecuteWait($tools & '\wimlib-imagex.exe', 'apply "' & $inputwim0 & '" "' & $labelwim0 & '" "' & $inputtmp0 & '\tmp\base_wim"', '', '', @SW_HIDE)
- If Not FileExists($inputtmp0 & '\tmp\base_wim\i386\system32\config\software') And FileExists($inputtmp0 & '\tmp\base_wim\Windows\system32\config\software') Then
- $i386Win7 = 'Windows'
- Else
- $i386Win7 = 'i386'
- EndIf
- ; Обработка списка удаления файлов
- If _FO_IsDir($inputzip0 & '\Del') Then ; Если существующая папка, то
- $aFileList = _FO_FileSearch($inputzip0 & '\Del', '*_delfile.txt')
- If Not @error Then
- For $x = 1 To $aFileList[0]
- _FileReadToArray($aFileList[$x], $aDel) ; Читаем файл в массив $aDel
- If Not @error Then
- For $i = 1 To $aDel[0]
- ; добавлена проверка коментариев в файле
- If $aDel[$i] <> '' And FileExists($inputtmp0 & '\tmp\base_wim\' & $aDel[$i]) Then FileDelete($inputtmp0 & '\tmp\base_wim\' & $aDel[$i])
- Next
- EndIf
- Next
- EndIf
- EndIf
- ; Обработка списка удаления папок
- If _FO_IsDir($inputzip0 & '\Del') Then ; Если существующая папка, то
- $aFileList = _FO_FileSearch($inputzip0 & '\Del', '*_deldir.txt')
- If Not @error Then
- For $x = 1 To $aFileList[0]
- _FileReadToArray($aFileList[$x], $aDel) ; Читаем файл в массив $aDel
- If Not @error Then
- For $i = 1 To $aDel[0]
- ; добавлена проверка коментариев в файле
- If $aDel[$i] <> '' And _FO_IsDir($inputtmp0 & '\tmp\base_wim\' & $aDel[$i]) Then DirRemove($inputtmp0 & '\tmp\base_wim\' & $aDel[$i], 1)
- Next
- EndIf
- Next
- EndIf
- EndIf
- GUICtrlSetData($Label000, $LngSb4)
- ; копирование файлов папки "root"
- If _FO_IsDir($inputzip0 & '\root') Then DirCopy($inputzip0 & '\root', $inputtmp0 & '\tmp\base_wim', 1)
- ; не подключать кусты реестра
- If GUICtrlRead($checkre) = 4 Then
- ; Формируем файл base5.reg и base4.reg
- GUICtrlSetData($Label000, $LngSb5)
- _RegConv($inputzip0, $inputtmp0)
- ; Кусты реестра software, default и system подключаются
- GUICtrlSetData($Label000, $LngSb7)
- Do
- ; Run(@ComSpec & ' /C REG LOAD HKLM\' & $PE_LM_SW & ' "' & $inputtmp0 & '\tmp\base_wim\' & $i386Win7 & '\system32\config\software"', '', @SW_HIDE)
- ; Run(@ComSpec & ' /C REG LOAD HKLM\' & $PE_CU_DF & ' "' & $inputtmp0 & '\tmp\base_wim\' & $i386Win7 & '\system32\config\default"', '', @SW_HIDE)
- ; Run(@ComSpec & ' /C REG LOAD HKLM\' & $PE_SY_HI & ' "' & $inputtmp0 & '\tmp\base_wim\' & $i386Win7 & '\system32\setupreg.hiv"', '', @SW_HIDE)
- RunWait('reg.exe Load HKLM\' & $PE_LM_SW & ' "' & $inputtmp0 & '\tmp\base_wim\' & $i386Win7 & '\system32\config\software"', '', @SW_HIDE)
- RunWait('reg.exe Load HKLM\' & $PE_CU_DF & ' "' & $inputtmp0 & '\tmp\base_wim\Users\NTUSER.DAT"', '', @SW_HIDE)
- ; Run('reg.exe Load HKLM\' & $PE_CU_DF & ' "' & $inputtmp0 & '\tmp\base_wim\' & $i386Win7 & '\system32\config\default"', '', @SW_HIDE)
- ; Run('reg.exe Load HKLM\' & $PE_SY_HI & ' "' & $inputtmp0 & '\tmp\base_wim\' & $i386Win7 & '\system32\setupreg.hiv"', '', @SW_HIDE)
- ; GUICtrlSetData($Label000, $LngSb8)
- ; Полный доступ к подключенным кустам ("Все" в 866?)
- RunWait(@ComSpec & ' /C "' & $tools & '\subinacl.exe" /subkeyreg HKEY_LOCAL_MACHINE\' & $PE_LM_SW & ' /grant=Все=F', '', @SW_HIDE)
- RunWait(@ComSpec & ' /C "' & $tools & '\subinacl.exe" /subkeyreg HKEY_LOCAL_MACHINE\' & $PE_CU_DF & ' /grant=Все=F', '', @SW_HIDE)
- ; RunWait(@ComSpec & ' /C ' & $tools & '\subinacl.exe /subkeyreg HKEY_LOCAL_MACHINE\' & $PE_SY_HI & ' /grant=Все=F', '', @SW_HIDE)
- ; проверка
- $res = $LngMsg10 & @CRLF
- $delim = @TAB & @TAB & '- '
- $err_m = 0
- $res &= @CRLF & 'software' & $delim
- RegRead('HKEY_LOCAL_MACHINE\' & $PE_LM_SW, '')
- If @error = 1 Then
- $err_m += 1
- $res &= $LngMsg8
- Else
- $res &= $LngMsg9
- EndIf
- $res &= @CRLF & 'default' & $delim
- RegRead('HKEY_LOCAL_MACHINE\' & $PE_CU_DF, '')
- If @error = 1 Then
- $err_m += 1
- $res &= $LngMsg8
- Else
- $res &= $LngMsg9
- EndIf
- ; $res &= @CRLF & 'setupreg.hiv' & $delim
- ; RegRead('HKEY_LOCAL_MACHINE\' & $PE_SY_HI, '')
- ; If @error = 1 Then
- ; $err_m += 1
- ; $res &= $LngMsg8
- ; Else
- ; $res &= $LngMsg9
- ; EndIf
- If GUICtrlRead($checkpause) = 1 Then $err_m = 1 ; Принудительная пауза
- If $err_m Then ; Если хотя бы один раздел не подключен, то
- Switch MsgBox(6, $LngMsg1, $res, 0, $Gui)
- Case 2 ; Отмена
- ; Отключение кустов реестра
- ; RunWait(@ComSpec & ' /C REG UNLOAD HKLM\' & $PE_LM_SW, '', @SW_HIDE)
- ; RunWait(@ComSpec & ' /C REG UNLOAD HKLM\' & $PE_CU_DF, '', @SW_HIDE)
- RunWait('reg.exe Unload HKLM\' & $PE_LM_SW, '', @SW_HIDE)
- RunWait('reg.exe Unload HKLM\' & $PE_CU_DF, '', @SW_HIDE)
- ; RunWait(@ComSpec & ' /C REG UNLOAD HKLM\' & $PE_SY_HI, '', @SW_HIDE)
- Exit
- Case 11 ; Продолжить
- ExitLoop
- ; Case 4 ; Повтор (тут ничего не нужно, цикл сам повторяется)
- EndSwitch
- EndIf
- Until 0
- ; Вносим данные в реестр
- GUICtrlSetData($Label000, $LngSb9)
- If FileExists($inputtmp0 & '\tmp\base4.reg') Then RunWait(@ComSpec & ' /C regedit /s "' & $inputtmp0 & '\tmp\base4.reg"', '', @SW_HIDE)
- If FileExists($inputtmp0 & '\tmp\base5.reg') Then RunWait(@ComSpec & ' /C regedit /s "' & $inputtmp0 & '\tmp\base5.reg"', '', @SW_HIDE)
- GUICtrlSetData($Label000, $LngSb10)
- ; Отключение кустов реестра
- ; RunWait(@ComSpec & ' /C REG UNLOAD HKLM\' & $PE_LM_SW, '', @SW_HIDE)
- ; RunWait(@ComSpec & ' /C REG UNLOAD HKLM\' & $PE_CU_DF, '', @SW_HIDE)
- RunWait('reg.exe Unload HKLM\' & $PE_LM_SW, '', @SW_HIDE)
- RunWait('reg.exe Unload HKLM\' & $PE_CU_DF, '', @SW_HIDE)
- ; RunWait(@ComSpec & ' /C REG UNLOAD HKLM\' & $PE_SY_HI, '', @SW_HIDE)
- Else
- ; пауза сборки
- If GUICtrlRead($checkpause) = 1 And MsgBox(4, $LngMsg1, $LngMsg11, 0, $Gui) = 7 Then Exit
- EndIf
- ; постобработка cmd-файлом, патчи и прочее
- GUICtrlSetData($Label000, $LngSb14)
- If FileExists($inputtmp0 & '\modify.cmd') Then RunWait($inputtmp0 & '\modify.cmd')
- $namewimpe = StringTrimRight($aPathwim[1], 4)
- GUICtrlSetData($Label000, $LngSb11 & ' ' & $namewimpe & '_New.wim. ' & $LngSb12)
- ; упаковка wim с прогресс-баром
- $ProgressBar = GUICtrlCreateProgress(110, 283, 200, 18, 0x00000008)
- GUICtrlSetColor(-1, 32250); цвет для классической темы
- GUICtrlSetBkColor(-1,0xffffff)
- $boot1 = ' --boot '
- If GUICtrlRead($checkboot) = 4 Then $boot1 = ' '
- $iPos = 0
- $iPID = Run($tools & '\wimlib-imagex.exe capture "' & $inputtmp0 & '\tmp\base_wim" "' & $inputtmp0 & '\' & $namewimpe & '_New.wim" ' & $boot1 & '--image-property NAME="' & $labelwim0 & '"', '', @SW_HIDE)
- $sizewim = ''
- ; $swTmp = ''
- While ProcessExists($iPID)
- ; Sleep(50)
- ; If FileExists($inputtmp0 & '\' & $namewimpe & '_New.wim') Then $sizewim = Ceiling(FileGetSize($inputtmp0 & '\' & $namewimpe & '_New.wim')/1048576)
- ; If $swTmp<>$sizewim Then GUICtrlSetData($LabelMb, $sizewim & ' ' & $LngSbMb)
- ; $swTmp=$sizewim
- $iPos += 1
- GUICtrlSetData($ProgressBar, $iPos)
- Sleep(600)
- If $iPos > 100 Then $iPos = 0
- WEnd
- If FileExists($inputtmp0 & '\' & $namewimpe & '_New.wim') Then $sizewim = Ceiling(FileGetSize($inputtmp0 & '\' & $namewimpe & '_New.wim')/1048576)
- GUICtrlSetData($LabelMb, $sizewim & ' ' & $LngSbMb)
- GUICtrlSetColor($LabelMb, 0xEE0000) ; Red
- GUICtrlDelete($ProgressBar)
- ; конец: упаковка wim с прогресс-баром
- GUICtrlSetData($Label000, $LngSb13 & ' ' & $sizewim & ' ' & $LngSbMb & '. Start: '&$Time1&', End: '&@MIN&':'&@SEC&', Total: '&Round(TimerDiff($Time) / 60000, 1) & " m")
- Run('Explorer.exe /select,"' & $inputtmp0 & '\' & $namewimpe & '_New.wim"')
- GUICtrlSetState($Upd, 64)
- ; кнопки "Обзор"
- Case $filewim
- $tmpwim = FileOpenDialog($LngOpD1, @WorkingDir, $LngOpD2 & " (*.wim)", 3, '', $Gui)
- If @error Then ContinueLoop
- GUICtrlSetData($inputwim, $tmpwim)
- Case $filezip
- $tmpzip = FileSelectFolder($LngOpF, '', '', @WorkingDir, $Gui)
- If @error Then ContinueLoop
- GUICtrlSetData($inputzip, $tmpzip)
- Case $filetmp
- $tmpbartpe = FileSelectFolder($LngOFT, '', '', @WorkingDir, $Gui)
- If @error Then ContinueLoop
- GUICtrlSetData($inputtmp, $tmpbartpe)
- Case -3
- Exit
- EndSwitch
- WEnd
- Func _RegConv($PathS, $PathD)
- ; Формируем файл base5.reg и base4.reg
- If _FO_IsDir($PathS & '\reg') Then
- $header1 = 'Windows Registry Editor Version 5.00'
- $header2 = 'REGEDIT4'
- $sTotalReg1 = $header1 & @CRLF & @CRLF
- $sTotalReg2 = $header2 & @CRLF & @CRLF
- $aFileList = _FO_FileSearch($PathS & '\reg', '*.reg')
- If Not @error Then
- For $i = 1 To $aFileList[0]
- ; Открывается reg-файл для замены строк
- $SR1 = FileRead($aFileList[$i])
- $SR1 = StringReplace($SR1, "HKEY_CURRENT_USER", "HKEY_LOCAL_MACHINE\" & $PE_CU_DF)
- $SR1 = StringReplace($SR1, "HKEY_LOCAL_MACHINE\SOFTWARE", "HKEY_LOCAL_MACHINE\" & $PE_LM_SW)
- $SR1 = StringReplace($SR1, "HKEY_LOCAL_MACHINE\SYSTEM", "HKEY_LOCAL_MACHINE\" & $PE_SY_HI)
- $SR1 = StringReplace($SR1, "CurrentControlSet", "ControlSet001")
- $SR1 = StringReplace($SR1, "HKEY_CLASSES_ROOT", "HKEY_LOCAL_MACHINE\PE_LM_SW\Classes")
- ; регулярное выражение, удаление данных в reg-файле не предназначенных для гостевого реестра
- $SR1 = StringRegExpReplace($SR1, "(?s)\[HKEY_(USERS|CURRENT_CONFIG|LOCAL_MACHINE\\HARDWARE|LOCAL_MACHINE\\SAM|LOCAL_MACHINE\\SECURITY).*?([^\[]*)", "")
- If StringLeft($SR1, 36) = $header1 Then
- $SR1 = StringReplace($SR1, "Windows Registry Editor Version 5.00", '# ' & StringRegExpReplace($aFileList[$i], "^.*\\", ""))
- $sTotalReg1 &= $SR1 & @CRLF & @CRLF
- ElseIf StringLeft($SR1, 8) = $header2 Then
- $SR1 = StringReplace($SR1, "REGEDIT4", '# ' & StringRegExpReplace($aFileList[$i], "^.*\\", ""))
- ; регулярное выражение, удаление данных в reg-файле не предназначенных для гостевого реестра
- $sTotalReg2 &= $SR1 & @CRLF & @CRLF
- EndIf
- Next
- $hFile = FileOpen($PathD & '\tmp\base5.reg', 2)
- ; проверка открытия файла для записи строки
- If $hFile = -1 Then Exit MsgBox(0, $LngErr, $LngMsg7, 0, $Gui)
- FileWrite($hFile, $sTotalReg1 & @CRLF)
- FileClose($hFile)
- $hFile = FileOpen($PathD & '\tmp\base4.reg', 2)
- ; проверка открытия файла для записи строки
- If $hFile = -1 Then Exit MsgBox(0, $LngErr, $LngMsg7, 0, $Gui)
- FileWrite($hFile, $sTotalReg2 & @CRLF)
- FileClose($hFile)
- EndIf
- EndIf
- EndFunc
- ;#include <File.au3>
- Func _FileReadToArray($sFilePath, ByRef $aArray)
- Local $hFile = FileOpen($sFilePath, 0)
- If $hFile = -1 Then Return SetError(1, 0, 0)
- Local $aFile = FileRead($hFile, FileGetSize($sFilePath))
- If StringRight($aFile, 1) = @LF Then $aFile = StringTrimRight($aFile, 1)
- If StringRight($aFile, 1) = @CR Then $aFile = StringTrimRight($aFile, 1)
- FileClose($hFile)
- If StringInStr($aFile, @LF) Then
- $aArray = StringSplit(StringStripCR($aFile), @LF)
- ElseIf StringInStr($aFile, @CR) Then
- $aArray = StringSplit($aFile, @CR)
- Else
- If StringLen($aFile) Then
- Dim $aArray[2] = [1, $aFile]
- Else
- Return SetError(2, 0, 0)
- EndIf
- EndIf
- Return 1
- EndFunc
- Func _GetLabel()
- Local $tmp, $rnim
- $rnim = Run($tools & '\wimlib-imagex.exe info "' & $inputwim0 & '"', '', @SW_HIDE, 2)
- ; Sleep(100)
- While 1
- $tmp &= StdoutRead($rnim)
- If @error Then ExitLoop
- Sleep(10)
- WEnd
- $tmp = StringRegExp($tmp, "Name:\h++(.+?)\v", 1)
- If @error Then
- Return SetError(1)
- Else
- Return $tmp[0]
- EndIf
- EndFunc
- Func _ReadGUI()
- $inputwim0 = GUICtrlRead($inputwim)
- $inputzip0 = GUICtrlRead($inputzip)
- $inputtmp0 = GUICtrlRead($inputtmp)
- If GUICtrlRead($checkpause) = 1 Then
- $iniw = 1
- Else
- $iniw = 0
- EndIf
- If GUICtrlRead($checkre) = 1 Then
- $reestr0 = 1
- Else
- $reestr0 = 0
- EndIf
- If GUICtrlRead($checkboot) = 1 Then
- $boot0 = 1
- Else
- $boot0 = 0
- EndIf
- EndFunc ;==>_ReadGUI
- Func _MyExit2()
- ;сохранение настроек в ini при закрытии программы
- _ReadGUI()
- IniWrite($Ini, "path", "path1", $inputwim0)
- IniWrite($Ini, "path", "path2", $inputzip0)
- IniWrite($Ini, "path", "path3", $inputtmp0)
- IniWrite($Ini, "path", "check", $iniw)
- IniWrite($Ini, "path", "reestr", $reestr0)
- ; IniWrite($Ini, "path", "boot", $boot0)
- ; IniWrite($Ini, "path", "Win7", $Win70)
- ; IniWrite($Ini, "path", "save", '1')
- EndFunc
- Func _About()
- Local $font, $GP, $Gui1, $url, $WbMn
- $GP = _GetChildCoor($GUI, 270, 180)
- GUISetState(@SW_DISABLE, $GUI)
- $font = "Arial"
- $Gui1 = GUICreate($LngAbout, $GP[0], $GP[1], $GP[2], $GP[3], BitOR($WS_CAPTION, $WS_SYSMENU, $WS_POPUP), -1, $GUI)
- ; If Not @Compiled Then GUISetIcon(@ScriptDir & '\имя.ico', 1)
- GUISetBkColor(0xE1E3E7)
- GUICtrlCreateLabel($LngTitle, 0, 0, 270, 63, $SS_CENTER + $SS_CENTERIMAGE)
- GUICtrlSetFont(-1, 15, 600, -1, $font)
- GUICtrlSetColor(-1, 0x3a6a7e)
- GUICtrlSetBkColor(-1, 0xF1F1EF)
- GUICtrlCreateLabel("-", 2, 64, 268, 1, 0x10)
- GUISetFont(9, 600, -1, $font)
- GUICtrlCreateLabel($LngVer & ' 4.0 4.03.2018', 55, 100, 210, 17)
- GUICtrlCreateLabel($LngSite & ':', 55, 115, 40, 17)
- $url = GUICtrlCreateLabel('http://azjio.ucoz.ru', 92, 115, 170, 17)
- GUICtrlSetCursor(-1, 0)
- GUICtrlSetColor(-1, 0x0000ff)
- GUICtrlCreateLabel('WebMoney:', 55, 130, 85, 17)
- $WbMn = GUICtrlCreateLabel('R939163939152', 130, 130, 125, 17)
- GUICtrlSetColor(-1, 0x3a6a7e)
- GUICtrlSetTip(-1, $LngCopy)
- GUICtrlSetCursor(-1, 0)
- GUICtrlCreateLabel('Copyright AZJIO © 2010-2013', 55, 145, 210, 17)
- GUISetState(@SW_SHOW, $Gui1)
- While 1
- Switch GUIGetMsg()
- Case $url
- ShellExecute('http://azjio.ucoz.ru')
- Case $WbMn
- ClipPut('R939163939152')
- Case -3
- GUISetState(@SW_ENABLE, $GUI)
- GUIDelete($Gui1)
- ExitLoop
- EndSwitch
- WEnd
- EndFunc ;==>_About
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement