Advertisement
AZJIO

Repack boot.wim v4.0

Mar 4th, 2018
1,127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 29.52 KB | None | 0 0
  1. #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
  2. #AutoIt3Wrapper_Outfile=repackwim.exe
  3. #AutoIt3Wrapper_Icon=repackwim.ico
  4. #AutoIt3Wrapper_Compression=4
  5. #AutoIt3Wrapper_UseAnsi=y
  6. #AutoIt3Wrapper_Res_Comment=
  7. #AutoIt3Wrapper_Res_Description=repackwim.exe
  8. #AutoIt3Wrapper_Res_Fileversion=4.0.0.0
  9. #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n
  10. #AutoIt3Wrapper_Res_LegalCopyright=AZJIO
  11. #AutoIt3Wrapper_Res_Language=1049
  12. #AutoIt3Wrapper_Run_Au3check=n
  13. #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
  14.  
  15. ;  @AZJIO 23.01.2011            AutoIt3 v3.2.12.1
  16.  
  17. #NoTrayIcon
  18. #RequireAdmin
  19. #Include <UserGUI.au3>
  20. #include <StaticConstants.au3>
  21. #include <WindowsConstants.au3>
  22. #include <wimgapi.au3>
  23. #include <FileOperations.au3>
  24. ; #include <GUIConstantsEx.au3>
  25.  
  26. ; En
  27. $LngTitle = 'Repack boot.wim v4.0'
  28. $LngAbout = 'About'
  29. $LngVer = 'Version'
  30. $LngSite = 'Site'
  31. $LngCopy='Copy'
  32. $LngMsg1 = 'Message'
  33. $LngMsg3 = 'Install the driver wimfltr.sys?'
  34. $LngDad = 'drag-and-drop'
  35. $LngPathW = 'Path wim'
  36. $LngPathA = 'Path Update'
  37. $LngTmp = 'Path Tmp'
  38. $LngTmpH = 'To avoid exceeding the allowable' & @CRLF & 'length of symbols in the path it is recommended' & @CRLF & 'to specify a folder in the root'
  39. $LngPs = 'pause before completing'
  40. $LngPsH = 'A pause gives the opportunity to make changes manually'
  41. ; $LngSv = 'Save settings'
  42. $LngNR = 'Do not mount the registry hives'
  43. $LngNRH = 'If you want to preserve the original registry'
  44. $LngBt = 'Boot'
  45. $LngBtH = 'For repacking programs'
  46. $LngUpd = 'Update'
  47. $LngSb = 'Statusbar'
  48. $LngErr = 'Error'
  49. $LngMsg4 = 'Missing file'
  50. $LngMsg5 = 'Missing folder'
  51. $LngMsg6 = 'The wim-file label is not found. Without a label' & @CRLF & 'it is impossible to extract a wim-file.'
  52. $LngMsg7 = 'Can not open file.'
  53. $LngSb1 = 'Delete the temporary folder "tmp"'
  54. $LngSb2 = 'Extraction'
  55. $LngSb3 = 'to a temporary folder "tmp"'
  56. $LngSb4 = 'Copy the update files from a folder "root"'
  57. $LngSb5 = 'Formed base5.reg and base4.reg'
  58. $LngMsg8 = 'not mount'
  59. $LngMsg9 = 'mount'
  60. $LngMsg10 = 'Pause for manual editing before packing.' & @CRLF & @CRLF & '"Continue" - packing.' & @CRLF & '"Repeat" - mount the registry hives, if not mounts.' & @CRLF & '"Cancel" - Exit.'
  61. $LngMsg11 = 'Pause for manual editing before packing.' & @CRLF & @CRLF & '"Yes" - packing.' & @CRLF & '"No" - Exit.'
  62. $LngMsg12 = 'Missing folder "tools".'
  63. ; $LngSb6 = 'Formed base4.reg'
  64. $LngSb7 = 'Mount the registry hives'
  65. $LngSb8 = 'The opening of full access to the registry hive'
  66. $LngSb9 = 'Adding data to the registry LiveCD.'
  67. $LngSb10 = 'Disable registry hives'
  68. $LngSb11 = 'Runs packing in'
  69. $LngSb12 = 'Wait for the implementation.'
  70. $LngSb13 = 'Done! Size:'
  71. $LngSb14 = 'пост-обработка - modify.cmd'
  72. $LngSbMb = 'Mb'
  73. $LngOpD1 = 'Choice wim'
  74. $LngOpD2 = 'boot-wim'
  75. $LngOpF = 'Choice a folder with updatings'
  76. $LngOFT = 'Choice temporary folder'
  77. $LngMsg13 = '- file not found.'
  78. $LngScrollAbt = 'The tool is designed' & @CRLF & _
  79. 'for repacking the boot.wim using the update.' & @CRLF & @CRLF & _
  80. 'The update contains three directories: ' & @CRLF & _
  81. '1. root - the contents of this directory copied to ' & _
  82. 'the root boot.wim with replacement ' & @CRLF & _
  83. '2. reg - contains the reg-files imported into the ' & _
  84. 'registry LiveCD ' & @CRLF & _
  85. '3. del - contains two types of lists removal of ' & _
  86. 'boot.wim. ' & @CRLF & @CRLF & _
  87. 'Repacking process can be seen in the status ' & _
  88. 'bar. Recommended to pause during ' & _
  89. 'repacking, to make sure mounted registry ' & _
  90. 'hives.' & @CRLF & @CRLF & _
  91. 'The utility is written in AutoIt3' & @CRLF & _
  92. 'autoitscript.com'
  93.  
  94. $Lang_dll = DllOpen("kernel32.dll")
  95. $UserIntLang=DllCall ( $Lang_dll, "int", "GetUserDefaultUILanguage" )
  96. If Not @error Then $UserIntLang=Hex($UserIntLang[0],4)
  97. DllClose($Lang_dll)
  98.  
  99. ; Ru
  100. ; если русская локализация, то русский язык
  101. If $UserIntLang = 0419 Then
  102.     $LngTitle = 'Repack boot.wim v4.0'
  103.     $LngAbout = 'О программе'
  104.     $LngVer = 'Версия'
  105.     $LngSite = 'Сайт'
  106.     $LngCopy='Копировать'
  107.     $LngMsg1 = 'Сообщение'
  108.     $LngMsg3 = 'Установить драйвер wimfltr.sys?'
  109.     $LngDad = 'используйте drag-and-drop'
  110.     $LngPathW = 'Путь к загрузочному wim-файлу'
  111.     $LngPathA = 'Путь к папке с обновлениями'
  112.     $LngTmp = 'Временный каталог'
  113.     $LngTmpH = "Во избежание превышение допустимой" & @CRLF & "длинны символов в пути рекомендуется" & @CRLF & "указать папку в корне диска"
  114.     $LngPs = 'сделать паузу перед окончательной сборкой'
  115.     $LngPsH = "Пауза даёт возможность" & @CRLF & "внести изменения вручную"
  116.     ; $LngSv = 'Сохранить установки'
  117.     $LngNR = 'Не подключать кусты реестра'
  118.     $LngNRH = "Если требуется сохранить оригинал реестра," & @CRLF & "например в томах."
  119.     $LngBt = 'Загрузочный'
  120.     $LngBtH = 'Снять галку при перепаковке программ.'
  121.     $LngUpd = 'Обновить'
  122.     $LngSb = 'Строка состояния'
  123.     $LngErr = 'Мелкая ошибка'
  124.     $LngMsg4 = 'Отсутствует файл'
  125.     $LngMsg5 = 'Отсутствует папка'
  126.     $LngMsg6 = 'Не найдена метка wim-файла.' & @CRLF & 'Без метки извлечь wim-файл невозможно.'
  127.     $LngMsg7 = 'Не возможно открыть файл.'
  128.     $LngSb1 = 'Удаление временной папки tmp'
  129.     $LngSb2 = 'Извлечение'
  130.     $LngSb3 = 'во временную папку tmp'
  131.     $LngSb4 = 'Копируем файлы обновления из папки root'
  132.     $LngSb5 = 'Формируется base5.reg и base4.reg'
  133.     $LngMsg8 = 'не подключен'
  134.     $LngMsg9 = 'подключен'
  135.     $LngMsg10 = 'Пауза для ручной правки перед упаковкой.' & @CRLF & @CRLF & '"Продолжить" - упаковка.' & @CRLF & '"Повторить" - подключить реестр, если не подключен.' & @CRLF & '"Отмена" - закрыть программу.'
  136.     $LngMsg11 = 'Пауза для ручной правки перед упаковкой.' & @CRLF & @CRLF & '"Да" - упаковка.' & @CRLF & '"Нет" - закрыть программу.'
  137.     $LngMsg12 = 'Отсутствует каталог tools.'
  138.     ; $LngSb6 = 'Формируется base4.reg'
  139.     $LngSb7 = 'Подключаем кусты реестра'
  140.     $LngSb8 = 'Открытие полного доступа к кустам реестра'
  141.     $LngSb9 = 'Добавление данных в реестр LiveCD.'
  142.     $LngSb10 = 'Отключаем кусты реестра'
  143.     $LngSb11 = 'Выполняется упаковка в'
  144.     $LngSb12 = 'Дождитесь выполнения.'
  145.     $LngSb13 = 'Готово !!! Размер:'
  146.     $LngSb14 = 'пост-обработка - modify.cmd'
  147.     $LngSbMb = 'Мб'
  148.     $LngOpD1 = 'Выбор wim-файла'
  149.     $LngOpD2 = 'Загрузочный образ'
  150.     $LngOpF = 'Указать папку с обновлениями'
  151.     $LngOFT = 'Указать временную папку'
  152.     $LngMsg13 = '- файл не найден, нет гарантии выполнения операций.'
  153.     $LngScrollAbt = 'Утилита предназначена' & @CRLF & _
  154.     'для перепаковки загрузочных boot.wim ' & _
  155.     'файлов с использованием апдейта.' & @CRLF & @CRLF & _
  156.     'Апдейт содержит три каталога: ' & @CRLF & _
  157.     '1. root - содержимое этого каталога ' & _
  158.     'копируется в корень boot.wim с заменой ' & @CRLF & _
  159.     '2. reg - содержит reg-файлы ' & _
  160.     'импортируемые в реестр LiveCD ' & @CRLF & _
  161.     '3. del - содержит два типа списков ' & _
  162.     'удаления из boot.wim. ' & @CRLF & @CRLF & _
  163.     'Процесс перепаковки можно видеть в ' & _
  164.     'строке состояния. Рекомендуется ' & _
  165.     'использовать паузу во время ' & _
  166.     'перепаковки, для уверенности ' & _
  167.     'подключения кустов реестра.' & @CRLF & @CRLF & _
  168.     'Утилита написана на AutoIt3' & @CRLF & _
  169.     'autoitscript.com'
  170. EndIf
  171.  
  172.  
  173. Global $inputwim0, $inputzip0, $inputtmp0, $iniw, $reestr0, $boot0
  174. $i386Win7 = ''
  175. $sizewim = ''
  176. Global $Stack[50], $Stack1[50], $aDel
  177. Global $Ini = @ScriptDir & '\rewim.ini' ; путь к rewim.ini
  178.  
  179. FileChangeDir(@ScriptDir)
  180.  
  181. ; проверка существования файлов-утилит
  182. $tools=@ScriptDir & '\tools'
  183. $aTools=StringSplit('wimlib-imagex.exe|libwim-15.dll', '|')
  184. $err=0
  185. For $i = 1 to $aTools[0]
  186.     If Not FileExists($tools&'\'&$aTools[$i]) Then
  187.         $err=$i
  188.         ExitLoop
  189.     EndIf
  190. Next
  191. If $err>0 Then MsgBox(0, $LngMsg1, $aTools[$err]&' '&$LngMsg13)
  192.  
  193.  
  194.  
  195. ;Проверка существования rewim.ini
  196. If Not FileExists($Ini) Then
  197. $sText = _
  198. '[path]' & @CRLF & _
  199. 'path1=' & @CRLF & _
  200. 'path2=' & @CRLF & _
  201. 'path3=' & @CRLF & _
  202. 'check=0' & @CRLF & _
  203. 'reestr=0' & @CRLF & _
  204. 'boot=1' & @CRLF & _
  205. 'Font=12' & @CRLF & _
  206. 'pe_cu_df=PE_CU_DF' & @CRLF & _
  207. 'pe_lm_sw=PE_LM_SW' & @CRLF & _
  208. 'pe_sy_hi=PE_SY_HI' & @CRLF
  209. $hFile = FileOpen($Ini, 2)
  210. FileWrite($hFile, $sText)
  211. FileClose($hFile)
  212. EndIf
  213.  
  214.  
  215. ;считываем rewim.ini
  216. $path1 = IniRead($Ini, "path", "path1", "")
  217. $path2 = IniRead($Ini, "path", "path2", "")
  218. $path3 = IniRead($Ini, "path", "path3", "")
  219. $check = IniRead($Ini, "path", "check", "0")
  220. ; $save = IniRead($Ini, "path", "save", "1")
  221. $reestr = IniRead($Ini, "path", "reestr", "0")
  222. $boot = IniRead($Ini, "path", "boot", "1")
  223. $PE_CU_DF = IniRead($Ini, "path", "pe_cu_df", "PE_CU_DF")
  224. If StringRegExpReplace($PE_CU_DF, '\w+', '') Then $PE_CU_DF = 'PE_CU_DF'
  225. $PE_LM_SW = IniRead($Ini, "path", "pe_lm_sw", "PE_LM_SW")
  226. If StringRegExpReplace($PE_LM_SW, '\w+', '') Then $PE_LM_SW = 'PE_LM_SW'
  227. $PE_SY_HI = IniRead($Ini, "path", "pe_sy_hi", "PE_SY_HI")
  228. If StringRegExpReplace($PE_SY_HI, '\w+', '') Then $PE_SY_HI = 'PE_SY_HI'
  229. $iniFont = Number(IniRead($Ini, 'path', 'Font', '0'))
  230. If $iniFont < 7 Or $iniFont > 20 Then $iniFont = 9
  231. ; $Win7= IniRead ($Ini, "path", "Win7", "0")
  232.  
  233. ; установка драйвера, если отсутствует
  234. ; 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)
  235.  
  236. $Gui = GUICreate($LngTitle, 500, 348, -1, -1, -1, 0x00000010) ; размер окна
  237. If $iniFont Then GUISetFont($iniFont)
  238. $About = GUICtrlCreateButton("@", 500 - 21, 2, 18, 20)
  239.  
  240. GUICtrlCreateLabel($LngDad, 150, 3, 260, 18)
  241.  
  242. GUICtrlCreateLabel($LngPathW, 20, 38, 400, 17)
  243. $inputwim = GUICtrlCreateInput("", 20, 55, 436, 22)
  244. GUICtrlSetState(-1, 8)
  245. $filewim = GUICtrlCreateButton("...", 455, 55, 26, 23)
  246. GUICtrlSetFont(-1, 16)
  247. If $path1 <> '' Then GUICtrlSetData($inputwim, $path1)
  248.  
  249. GUICtrlCreateLabel($LngPathA, 20, 93, 400, 17)
  250. $inputzip = GUICtrlCreateInput("", 20, 110, 436, 22)
  251. GUICtrlSetState(-1, 8)
  252. $filezip = GUICtrlCreateButton("...", 455, 110, 26, 23)
  253. GUICtrlSetFont(-1, 16)
  254. If FileExists(@ScriptDir & '\Update') And $path2 = '' Then GUICtrlSetData($inputzip, @ScriptDir & '\Update')
  255. If $path2 <> '' Then GUICtrlSetData($inputzip, $path2)
  256.  
  257. GUICtrlCreateLabel($LngTmp, 20, 148, 400, 17)
  258. $inputtmp = GUICtrlCreateInput("", 20, 165, 436, 22)
  259. GUICtrlSetState(-1, 8)
  260. GUICtrlSetTip(-1, $LngTmpH)
  261. If $path3 = '' Then
  262.     GUICtrlSetData($inputtmp, @ScriptDir)
  263. Else
  264.     GUICtrlSetData($inputtmp, $path3)
  265. EndIf
  266. $filetmp = GUICtrlCreateButton("...", 455, 165, 26, 23)
  267. GUICtrlSetFont(-1, 16)
  268.  
  269. ; чекбоксы
  270. $checkpause = GUICtrlCreateCheckbox($LngPs, 20, 195, 360, 20)
  271. GUICtrlSetTip(-1, $LngPsH)
  272. If $check = '1' Then GUICtrlSetState($checkpause, 1)
  273. ; $checksave = GUICtrlCreateCheckbox($LngSv, 20, 215, 255, 20)
  274. ; If $save = '1' Then GUICtrlSetState($checksave, 1)
  275. $checkre = GUICtrlCreateCheckbox($LngNR, 20, 215, 360, 20)
  276. GUICtrlSetTip(-1, $LngNRH)
  277. If $reestr = '1' Then GUICtrlSetState($checkre, 1)
  278. $checkboot = GUICtrlCreateCheckbox($LngBt, 20, 235, 360, 20)
  279. GUICtrlSetTip(-1, $LngBtH)
  280. If $boot = '1' Then GUICtrlSetState($checkboot, 1)
  281. ; $checkWin7=GUICtrlCreateCheckbox ("Win7", 290,235,190,20)
  282. ; GUICtrlSetTip(-1, "Win7=Windows, XP=i386.")
  283. ; If $Win7='1' Then GuiCtrlSetState($checkWin7, 1)
  284.  
  285.  
  286. $Upd = GUICtrlCreateButton($LngUpd, 370, 270, 110, 45)
  287. GUICtrlSetFont(-1, 14)
  288. $Label000 = GUICtrlCreateLabel($LngSb, 10, 328, 380, 20, 0xC)
  289. $LabelMb = GUICtrlCreateLabel('', 392, 320, 80, 28, 0xC)
  290. GUICtrlSetFont(-1, 15, 700)
  291. GUICtrlSetColor(-1, 0xff0000)
  292.  
  293. GUISetState()
  294. OnAutoItExitRegister("_MyExit2")
  295.  
  296. While 1
  297.     Switch GUIGetMsg()
  298.         Case $About
  299.             _About()
  300.         Case -13 ;событие приходящееся на drag-and-drop
  301.             If @GUI_DropId = $inputwim Then GUICtrlSetData($inputwim, @GUI_DragFile)
  302.             If @GUI_DropId = $inputzip Then GUICtrlSetData($inputzip, @GUI_DragFile)
  303.             If @GUI_DropId = $inputtmp Then GUICtrlSetData($inputtmp, @GUI_DragFile)
  304.         Case $Upd
  305.             $Time1=@MIN&':'&@SEC
  306.             $Time = TimerInit()
  307.             GUICtrlSetData($LabelMb, '')
  308.             GUICtrlSetColor($LabelMb, 0x000000)
  309.             _ReadGUI()
  310.             If Not FileExists($inputwim0) Then
  311.                 MsgBox(0, $LngErr, $LngMsg4 & ' ' & $inputwim0, 0, $Gui)
  312.                 ContinueLoop
  313.             EndIf
  314.             If Not FileExists($inputzip0) Then
  315.                 MsgBox(0, $LngErr, $LngMsg5 & ' ' & $inputzip0, 0, $Gui)
  316.                 ContinueLoop
  317.             EndIf
  318.             If Not FileExists($inputtmp0) Then
  319.                 MsgBox(0, $LngErr, $LngMsg5 & ' ' & $inputtmp0, 0, $Gui)
  320.                 ContinueLoop
  321.             EndIf
  322.             GUICtrlSetState($Upd, 128)
  323.             ; If GUICtrlRead ($checkWin7)=1 Then
  324.             ; $Win70=1
  325.             ; $i386Win7='Windows'
  326.             ; Else
  327.             ; $Win70=0
  328.             ; $i386Win7='i386'
  329.             ; EndIf
  330.             If $inputtmp0 = '' Or Not FileExists($inputtmp0) Then $inputtmp0 = @TempDir
  331.             GUICtrlSetData($Label000, $LngSb1)
  332.             If FileExists($inputtmp0 & '\tmp') Then DirRemove($inputtmp0 & '\tmp', 1)
  333.             DirCreate($inputtmp0 & '\tmp\base_wim')
  334.             Sleep(900)
  335.  
  336.             If Not FileExists($tools) Then
  337.                 MsgBox(0, $LngErr, $LngMsg12, 0, $Gui)
  338.                 GUICtrlSetState($Upd, 64)
  339.                 ContinueLoop
  340.             EndIf
  341.  
  342.  
  343.             ; Вытаскиваем метку WIM-файла
  344.             $labelwim0 = _GetLabel()
  345.             If @error Then
  346.                 MsgBox(0, $LngErr, $LngMsg6, 0, $Gui)
  347.                 GUICtrlSetData($Label000, '')
  348.                 GUICtrlSetState($Upd, 64)
  349.                 ContinueLoop
  350.             EndIf
  351.             ; конец "Вытаскиваем метку WIM-файла"
  352.  
  353.  
  354.             ; Распаковка WIM
  355.             $aPathwim = StringRegExp($inputwim0, "(^.*)\\(.*)$", 3)
  356.             GUICtrlSetData($Label000, $LngSb2 & ' ' & $aPathwim[1] & ' ' & $LngSb3)
  357.             ; команда распаковки WIM-файла
  358.             ShellExecuteWait($tools & '\wimlib-imagex.exe', 'apply "' & $inputwim0 & '" "' & $labelwim0 & '" "' & $inputtmp0 & '\tmp\base_wim"', '', '', @SW_HIDE)
  359.  
  360.  
  361.             If Not FileExists($inputtmp0 & '\tmp\base_wim\i386\system32\config\software') And FileExists($inputtmp0 & '\tmp\base_wim\Windows\system32\config\software') Then
  362.                 $i386Win7 = 'Windows'
  363.             Else
  364.                 $i386Win7 = 'i386'
  365.             EndIf
  366.  
  367.             ; Обработка списка удаления файлов
  368.             If _FO_IsDir($inputzip0 & '\Del') Then ; Если существующая папка, то
  369.                 $aFileList = _FO_FileSearch($inputzip0 & '\Del', '*_delfile.txt')
  370.                 If Not @error Then
  371.                     For $x = 1 To $aFileList[0]
  372.                         _FileReadToArray($aFileList[$x], $aDel) ; Читаем файл в массив $aDel
  373.                         If Not @error Then
  374.                             For $i = 1 To $aDel[0]
  375.                                 ; добавлена проверка коментариев в файле
  376.                                 If $aDel[$i] <> '' And FileExists($inputtmp0 & '\tmp\base_wim\' & $aDel[$i]) Then FileDelete($inputtmp0 & '\tmp\base_wim\' & $aDel[$i])
  377.                             Next
  378.                         EndIf
  379.                     Next
  380.                 EndIf
  381.             EndIf
  382.  
  383.             ; Обработка списка удаления папок
  384.             If _FO_IsDir($inputzip0 & '\Del') Then ; Если существующая папка, то
  385.                 $aFileList = _FO_FileSearch($inputzip0 & '\Del', '*_deldir.txt')
  386.                 If Not @error Then
  387.                     For $x = 1 To $aFileList[0]
  388.                         _FileReadToArray($aFileList[$x], $aDel) ; Читаем файл в массив $aDel
  389.                         If Not @error Then
  390.                             For $i = 1 To $aDel[0]
  391.                                 ; добавлена проверка коментариев в файле
  392.                                 If $aDel[$i] <> '' And _FO_IsDir($inputtmp0 & '\tmp\base_wim\' & $aDel[$i]) Then DirRemove($inputtmp0 & '\tmp\base_wim\' & $aDel[$i], 1)
  393.                             Next
  394.                         EndIf
  395.                     Next
  396.                 EndIf
  397.             EndIf
  398.  
  399.             GUICtrlSetData($Label000, $LngSb4)
  400.             ; копирование файлов папки "root"
  401.             If _FO_IsDir($inputzip0 & '\root') Then DirCopy($inputzip0 & '\root', $inputtmp0 & '\tmp\base_wim', 1)
  402.  
  403.             ; не подключать кусты реестра
  404.             If GUICtrlRead($checkre) = 4 Then
  405.  
  406.  
  407.                 ; Формируем файл base5.reg и base4.reg
  408.                 GUICtrlSetData($Label000, $LngSb5)
  409.                 _RegConv($inputzip0, $inputtmp0)
  410.  
  411.                 ; Кусты реестра software, default и system подключаются
  412.                 GUICtrlSetData($Label000, $LngSb7)
  413.                
  414.                 Do
  415. ; Run(@ComSpec & ' /C REG LOAD HKLM\' & $PE_LM_SW & ' "' & $inputtmp0 & '\tmp\base_wim\' & $i386Win7 & '\system32\config\software"', '', @SW_HIDE)
  416. ; Run(@ComSpec & ' /C REG LOAD HKLM\' & $PE_CU_DF & ' "' & $inputtmp0 & '\tmp\base_wim\' & $i386Win7 & '\system32\config\default"', '', @SW_HIDE)
  417. ; Run(@ComSpec & ' /C REG LOAD HKLM\' & $PE_SY_HI & ' "' & $inputtmp0 & '\tmp\base_wim\' & $i386Win7 & '\system32\setupreg.hiv"', '', @SW_HIDE)
  418. RunWait('reg.exe Load HKLM\' & $PE_LM_SW & ' "' & $inputtmp0 & '\tmp\base_wim\' & $i386Win7 & '\system32\config\software"', '', @SW_HIDE)
  419. RunWait('reg.exe Load HKLM\' & $PE_CU_DF & ' "' & $inputtmp0 & '\tmp\base_wim\Users\NTUSER.DAT"', '', @SW_HIDE)
  420. ; Run('reg.exe Load HKLM\' & $PE_CU_DF & ' "' & $inputtmp0 & '\tmp\base_wim\' & $i386Win7 & '\system32\config\default"', '', @SW_HIDE)
  421. ; Run('reg.exe Load HKLM\' & $PE_SY_HI & ' "' & $inputtmp0 & '\tmp\base_wim\' & $i386Win7 & '\system32\setupreg.hiv"', '', @SW_HIDE)
  422.                     ; GUICtrlSetData($Label000, $LngSb8)
  423.                     ; Полный доступ к подключенным кустам ("Все" в 866?)
  424.                     RunWait(@ComSpec & ' /C "' & $tools & '\subinacl.exe" /subkeyreg HKEY_LOCAL_MACHINE\' & $PE_LM_SW & ' /grant=Все=F', '', @SW_HIDE)
  425.                     RunWait(@ComSpec & ' /C "' & $tools & '\subinacl.exe" /subkeyreg HKEY_LOCAL_MACHINE\' & $PE_CU_DF & ' /grant=Все=F', '', @SW_HIDE)
  426.                     ; RunWait(@ComSpec & ' /C ' & $tools & '\subinacl.exe /subkeyreg HKEY_LOCAL_MACHINE\' & $PE_SY_HI & ' /grant=Все=F', '', @SW_HIDE)
  427.                     ; проверка
  428.                     $res = $LngMsg10 & @CRLF
  429.                     $delim = @TAB & @TAB & '- '
  430.                     $err_m = 0
  431.                    
  432.                     $res &= @CRLF & 'software' & $delim
  433.                     RegRead('HKEY_LOCAL_MACHINE\' & $PE_LM_SW, '')
  434.                     If @error = 1 Then
  435.                         $err_m += 1
  436.                         $res &= $LngMsg8
  437.                     Else
  438.                         $res &= $LngMsg9
  439.                     EndIf
  440.                     $res &= @CRLF & 'default' & $delim
  441.                     RegRead('HKEY_LOCAL_MACHINE\' & $PE_CU_DF, '')
  442.                     If @error = 1 Then
  443.                         $err_m += 1
  444.                         $res &= $LngMsg8
  445.                     Else
  446.                         $res &= $LngMsg9
  447.                     EndIf
  448.                     ; $res &= @CRLF & 'setupreg.hiv' & $delim
  449.                     ; RegRead('HKEY_LOCAL_MACHINE\' & $PE_SY_HI, '')
  450.                     ; If @error = 1 Then
  451.                         ; $err_m += 1
  452.                         ; $res &= $LngMsg8
  453.                     ; Else
  454.                         ; $res &= $LngMsg9
  455.                     ; EndIf
  456.                     If GUICtrlRead($checkpause) = 1 Then $err_m = 1 ; Принудительная пауза
  457.                     If $err_m Then ; Если хотя бы один раздел не подключен, то
  458.                         Switch MsgBox(6, $LngMsg1, $res, 0, $Gui)
  459.                             Case 2 ; Отмена
  460.                                 ; Отключение кустов реестра
  461.                                 ; RunWait(@ComSpec & ' /C REG UNLOAD HKLM\' & $PE_LM_SW, '', @SW_HIDE)
  462.                                 ; RunWait(@ComSpec & ' /C REG UNLOAD HKLM\' & $PE_CU_DF, '', @SW_HIDE)
  463.                                 RunWait('reg.exe Unload HKLM\' & $PE_LM_SW, '', @SW_HIDE)
  464.                                 RunWait('reg.exe Unload HKLM\' & $PE_CU_DF, '', @SW_HIDE)
  465.                                 ; RunWait(@ComSpec & ' /C REG UNLOAD HKLM\' & $PE_SY_HI, '', @SW_HIDE)
  466.                                 Exit
  467.                             Case 11 ; Продолжить
  468.                                 ExitLoop
  469.                             ; Case 4 ; Повтор (тут ничего не нужно, цикл сам повторяется)
  470.                         EndSwitch
  471.                     EndIf
  472.                 Until 0
  473.                
  474.                 ; Вносим данные в реестр
  475.                 GUICtrlSetData($Label000, $LngSb9)
  476.                 If FileExists($inputtmp0 & '\tmp\base4.reg') Then RunWait(@ComSpec & ' /C regedit /s "' & $inputtmp0 & '\tmp\base4.reg"', '', @SW_HIDE)
  477.                 If FileExists($inputtmp0 & '\tmp\base5.reg') Then RunWait(@ComSpec & ' /C regedit /s "' & $inputtmp0 & '\tmp\base5.reg"', '', @SW_HIDE)
  478.  
  479.  
  480.                 GUICtrlSetData($Label000, $LngSb10)
  481.                 ; Отключение кустов реестра
  482.                 ; RunWait(@ComSpec & ' /C REG UNLOAD HKLM\' & $PE_LM_SW, '', @SW_HIDE)
  483.                 ; RunWait(@ComSpec & ' /C REG UNLOAD HKLM\' & $PE_CU_DF, '', @SW_HIDE)
  484.                 RunWait('reg.exe Unload HKLM\' & $PE_LM_SW, '', @SW_HIDE)
  485.                 RunWait('reg.exe Unload HKLM\' & $PE_CU_DF, '', @SW_HIDE)
  486.                 ; RunWait(@ComSpec & ' /C REG UNLOAD HKLM\' & $PE_SY_HI, '', @SW_HIDE)
  487.             Else
  488.                 ; пауза сборки
  489.                 If GUICtrlRead($checkpause) = 1 And MsgBox(4, $LngMsg1, $LngMsg11, 0, $Gui) = 7 Then Exit
  490.             EndIf
  491.  
  492.             ; постобработка cmd-файлом, патчи и прочее
  493.             GUICtrlSetData($Label000, $LngSb14)
  494.             If FileExists($inputtmp0 & '\modify.cmd') Then RunWait($inputtmp0 & '\modify.cmd')
  495.  
  496.             $namewimpe = StringTrimRight($aPathwim[1], 4)
  497.             GUICtrlSetData($Label000, $LngSb11 & ' ' & $namewimpe & '_New.wim. ' & $LngSb12)
  498.  
  499.  
  500.  
  501.  
  502.             ; упаковка wim с прогресс-баром
  503.             $ProgressBar = GUICtrlCreateProgress(110, 283, 200, 18, 0x00000008)
  504.             GUICtrlSetColor(-1, 32250); цвет для классической темы
  505.             GUICtrlSetBkColor(-1,0xffffff)
  506.  
  507.             $boot1 = ' --boot '
  508.             If GUICtrlRead($checkboot) = 4 Then $boot1 = ' '
  509.             $iPos = 0
  510.             $iPID = Run($tools & '\wimlib-imagex.exe capture "' & $inputtmp0 & '\tmp\base_wim" "' & $inputtmp0 & '\' & $namewimpe & '_New.wim" ' & $boot1 & '--image-property NAME="' & $labelwim0 & '"', '', @SW_HIDE)
  511.             $sizewim = ''
  512.             ; $swTmp = ''
  513.             While ProcessExists($iPID)
  514.                 ; Sleep(50)
  515.                 ; If FileExists($inputtmp0 & '\' & $namewimpe & '_New.wim') Then $sizewim = Ceiling(FileGetSize($inputtmp0 & '\' & $namewimpe & '_New.wim')/1048576)
  516.                 ; If $swTmp<>$sizewim Then GUICtrlSetData($LabelMb, $sizewim & ' ' & $LngSbMb)
  517.                 ; $swTmp=$sizewim
  518.                 $iPos += 1
  519.                 GUICtrlSetData($ProgressBar, $iPos)
  520.                 Sleep(600)
  521.                 If $iPos > 100 Then $iPos = 0
  522.             WEnd
  523.             If FileExists($inputtmp0 & '\' & $namewimpe & '_New.wim') Then $sizewim = Ceiling(FileGetSize($inputtmp0 & '\' & $namewimpe & '_New.wim')/1048576)
  524.             GUICtrlSetData($LabelMb, $sizewim & ' ' & $LngSbMb)
  525.             GUICtrlSetColor($LabelMb, 0xEE0000) ; Red
  526.             GUICtrlDelete($ProgressBar)
  527.             ; конец: упаковка wim с прогресс-баром
  528.  
  529.             GUICtrlSetData($Label000, $LngSb13 & ' ' & $sizewim & ' ' & $LngSbMb & '. Start: '&$Time1&', End: '&@MIN&':'&@SEC&', Total: '&Round(TimerDiff($Time) / 60000, 1) & " m")
  530.  
  531.             Run('Explorer.exe /select,"' & $inputtmp0 & '\' & $namewimpe & '_New.wim"')
  532.             GUICtrlSetState($Upd, 64)
  533.  
  534.             ; кнопки "Обзор"
  535.         Case $filewim
  536.             $tmpwim = FileOpenDialog($LngOpD1, @WorkingDir, $LngOpD2 & " (*.wim)", 3, '', $Gui)
  537.             If @error Then ContinueLoop
  538.             GUICtrlSetData($inputwim, $tmpwim)
  539.         Case $filezip
  540.             $tmpzip = FileSelectFolder($LngOpF, '', '', @WorkingDir, $Gui)
  541.             If @error Then ContinueLoop
  542.             GUICtrlSetData($inputzip, $tmpzip)
  543.         Case $filetmp
  544.             $tmpbartpe = FileSelectFolder($LngOFT, '', '', @WorkingDir, $Gui)
  545.             If @error Then ContinueLoop
  546.             GUICtrlSetData($inputtmp, $tmpbartpe)
  547.         Case -3
  548.             Exit
  549.     EndSwitch
  550. WEnd
  551.  
  552.  
  553. Func _RegConv($PathS, $PathD)
  554.     ; Формируем файл base5.reg и base4.reg
  555.     If _FO_IsDir($PathS & '\reg') Then
  556.         $header1 = 'Windows Registry Editor Version 5.00'
  557.         $header2 = 'REGEDIT4'
  558.         $sTotalReg1 = $header1 & @CRLF & @CRLF
  559.         $sTotalReg2 = $header2 & @CRLF & @CRLF
  560.         $aFileList = _FO_FileSearch($PathS & '\reg', '*.reg')
  561.         If Not @error Then
  562.             For $i = 1 To $aFileList[0]
  563.                 ; Открывается reg-файл для замены строк
  564.                 $SR1 = FileRead($aFileList[$i])
  565.                 $SR1 = StringReplace($SR1, "HKEY_CURRENT_USER", "HKEY_LOCAL_MACHINE\" & $PE_CU_DF)
  566.                 $SR1 = StringReplace($SR1, "HKEY_LOCAL_MACHINE\SOFTWARE", "HKEY_LOCAL_MACHINE\" & $PE_LM_SW)
  567.                 $SR1 = StringReplace($SR1, "HKEY_LOCAL_MACHINE\SYSTEM", "HKEY_LOCAL_MACHINE\" & $PE_SY_HI)
  568.                 $SR1 = StringReplace($SR1, "CurrentControlSet", "ControlSet001")
  569.                 $SR1 = StringReplace($SR1, "HKEY_CLASSES_ROOT", "HKEY_LOCAL_MACHINE\PE_LM_SW\Classes")
  570.                 ; регулярное выражение, удаление данных в reg-файле не предназначенных для гостевого реестра
  571.                 $SR1 = StringRegExpReplace($SR1, "(?s)\[HKEY_(USERS|CURRENT_CONFIG|LOCAL_MACHINE\\HARDWARE|LOCAL_MACHINE\\SAM|LOCAL_MACHINE\\SECURITY).*?([^\[]*)", "")
  572.                 If StringLeft($SR1, 36) = $header1 Then
  573.                     $SR1 = StringReplace($SR1, "Windows Registry Editor Version 5.00", '# ' & StringRegExpReplace($aFileList[$i], "^.*\\", ""))
  574.                     $sTotalReg1 &= $SR1 & @CRLF & @CRLF
  575.                 ElseIf StringLeft($SR1, 8) = $header2 Then
  576.                     $SR1 = StringReplace($SR1, "REGEDIT4", '# ' & StringRegExpReplace($aFileList[$i], "^.*\\", ""))
  577.                     ; регулярное выражение, удаление данных в reg-файле не предназначенных для гостевого реестра
  578.                     $sTotalReg2 &= $SR1 & @CRLF & @CRLF
  579.                 EndIf
  580.             Next
  581.             $hFile = FileOpen($PathD & '\tmp\base5.reg', 2)
  582.             ; проверка открытия файла для записи строки
  583.             If $hFile = -1 Then Exit MsgBox(0, $LngErr, $LngMsg7, 0, $Gui)
  584.             FileWrite($hFile, $sTotalReg1 & @CRLF)
  585.             FileClose($hFile)
  586.             $hFile = FileOpen($PathD & '\tmp\base4.reg', 2)
  587.             ; проверка открытия файла для записи строки
  588.             If $hFile = -1 Then Exit MsgBox(0, $LngErr, $LngMsg7, 0, $Gui)
  589.             FileWrite($hFile, $sTotalReg2 & @CRLF)
  590.             FileClose($hFile)
  591.         EndIf
  592.     EndIf
  593. EndFunc
  594.  
  595. ;#include <File.au3>
  596. Func _FileReadToArray($sFilePath, ByRef $aArray)
  597.     Local $hFile = FileOpen($sFilePath, 0)
  598.     If $hFile = -1 Then Return SetError(1, 0, 0)
  599.     Local $aFile = FileRead($hFile, FileGetSize($sFilePath))
  600.     If StringRight($aFile, 1) = @LF Then $aFile = StringTrimRight($aFile, 1)
  601.     If StringRight($aFile, 1) = @CR Then $aFile = StringTrimRight($aFile, 1)
  602.     FileClose($hFile)
  603.     If StringInStr($aFile, @LF) Then
  604.         $aArray = StringSplit(StringStripCR($aFile), @LF)
  605.     ElseIf StringInStr($aFile, @CR) Then
  606.         $aArray = StringSplit($aFile, @CR)
  607.     Else
  608.         If StringLen($aFile) Then
  609.             Dim $aArray[2] = [1, $aFile]
  610.         Else
  611.             Return SetError(2, 0, 0)
  612.         EndIf
  613.     EndIf
  614.     Return 1
  615. EndFunc
  616.  
  617.  
  618. Func _GetLabel()
  619.     Local $tmp, $rnim
  620.     $rnim = Run($tools & '\wimlib-imagex.exe info "' & $inputwim0 & '"', '', @SW_HIDE, 2)
  621.     ; Sleep(100)
  622.     While 1
  623.         $tmp &= StdoutRead($rnim)
  624.         If @error Then ExitLoop
  625.         Sleep(10)
  626.     WEnd
  627.     $tmp = StringRegExp($tmp, "Name:\h++(.+?)\v", 1)
  628.     If @error Then
  629.         Return SetError(1)
  630.     Else
  631.         Return $tmp[0]
  632.     EndIf
  633. EndFunc
  634.  
  635. Func _ReadGUI()
  636.     $inputwim0 = GUICtrlRead($inputwim)
  637.     $inputzip0 = GUICtrlRead($inputzip)
  638.     $inputtmp0 = GUICtrlRead($inputtmp)
  639.  
  640.     If GUICtrlRead($checkpause) = 1 Then
  641.         $iniw = 1
  642.     Else
  643.         $iniw = 0
  644.     EndIf
  645.     If GUICtrlRead($checkre) = 1 Then
  646.         $reestr0 = 1
  647.     Else
  648.         $reestr0 = 0
  649.     EndIf
  650.     If GUICtrlRead($checkboot) = 1 Then
  651.         $boot0 = 1
  652.     Else
  653.         $boot0 = 0
  654.     EndIf
  655. EndFunc   ;==>_ReadGUI
  656.  
  657. Func _MyExit2()
  658.     ;сохранение настроек в ini при закрытии программы
  659.     _ReadGUI()
  660.     IniWrite($Ini, "path", "path1", $inputwim0)
  661.     IniWrite($Ini, "path", "path2", $inputzip0)
  662.     IniWrite($Ini, "path", "path3", $inputtmp0)
  663.     IniWrite($Ini, "path", "check", $iniw)
  664.     IniWrite($Ini, "path", "reestr", $reestr0)
  665.     ; IniWrite($Ini, "path", "boot", $boot0)
  666.     ; IniWrite($Ini, "path", "Win7", $Win70)
  667.     ; IniWrite($Ini, "path", "save", '1')
  668. EndFunc
  669.  
  670. Func _About()
  671.     Local $font, $GP, $Gui1, $url, $WbMn
  672.     $GP = _GetChildCoor($GUI, 270, 180)
  673.     GUISetState(@SW_DISABLE, $GUI)
  674.     $font = "Arial"
  675.     $Gui1 = GUICreate($LngAbout, $GP[0], $GP[1], $GP[2], $GP[3], BitOR($WS_CAPTION, $WS_SYSMENU, $WS_POPUP), -1, $GUI)
  676.     ; If Not @Compiled Then GUISetIcon(@ScriptDir & '\имя.ico', 1)
  677.     GUISetBkColor(0xE1E3E7)
  678.     GUICtrlCreateLabel($LngTitle, 0, 0, 270, 63, $SS_CENTER + $SS_CENTERIMAGE)
  679.     GUICtrlSetFont(-1, 15, 600, -1, $font)
  680.     GUICtrlSetColor(-1, 0x3a6a7e)
  681.     GUICtrlSetBkColor(-1, 0xF1F1EF)
  682.     GUICtrlCreateLabel("-", 2, 64, 268, 1, 0x10)
  683.  
  684.     GUISetFont(9, 600, -1, $font)
  685.     GUICtrlCreateLabel($LngVer & ' 4.0  4.03.2018', 55, 100, 210, 17)
  686.     GUICtrlCreateLabel($LngSite & ':', 55, 115, 40, 17)
  687.     $url = GUICtrlCreateLabel('http://azjio.ucoz.ru', 92, 115, 170, 17)
  688.     GUICtrlSetCursor(-1, 0)
  689.     GUICtrlSetColor(-1, 0x0000ff)
  690.     GUICtrlCreateLabel('WebMoney:', 55, 130, 85, 17)
  691.     $WbMn = GUICtrlCreateLabel('R939163939152', 130, 130, 125, 17)
  692.     GUICtrlSetColor(-1, 0x3a6a7e)
  693.     GUICtrlSetTip(-1, $LngCopy)
  694.     GUICtrlSetCursor(-1, 0)
  695.     GUICtrlCreateLabel('Copyright AZJIO © 2010-2013', 55, 145, 210, 17)
  696.     GUISetState(@SW_SHOW, $Gui1)
  697.     While 1
  698.         Switch GUIGetMsg()
  699.             Case $url
  700.                 ShellExecute('http://azjio.ucoz.ru')
  701.             Case $WbMn
  702.                 ClipPut('R939163939152')
  703.             Case -3
  704.                 GUISetState(@SW_ENABLE, $GUI)
  705.                 GUIDelete($Gui1)
  706.                 ExitLoop
  707.         EndSwitch
  708.     WEnd
  709. EndFunc   ;==>_About
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement