#pragma compile(Icon, Resurses\MyIcon.ico) ; Иконка для EXE
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>
Local $sMyProgDir = '\_MyProgramm' ; ................................................ Имя каталога куда будет производиться распаковка
Local $sTempDir = @TempDir & '\~MyProgramm' & @YDAY & @HOUR & @MIN & @SEC & @MSEC & '\' ; ... Адрес временного каталога
Local $iArchive = 'Archive_x86.exe' ; .............................................. Архив по умолчанию
Local $iArchiveSize = 2000000 ; ..................................................... Общий размер файлов в архиве (в байтах)
Local $iStart, $iPID, $iElements, $hGUI, $iLabel1, $iLabel3, $iLabel3, $iButt1, $iButt2, $iButt3, $iGroup, $iRadio1, $iRadio2, $iProgress
Opt('GUIOnEventMode', 1)
$hGUI = GUICreate('Мой инсталлятор', 400, 300)
GUISetBkColor(0x78FF7A)
$iLabel1 = GUICtrlCreateLabel(' ', 30, 30, 250)
$iLabel2 = GUICtrlCreateLabel('Что распаковываем:', 30, 110)
$iLabel3 = GUICtrlCreateLabel('Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание ' & _
'Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание ' & _
'Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание Мое описание ', _
50, 50, 300, 150, $SS_SUNKEN)
GUICtrlSetBkColor(-1, 0xFFFED8)
$iButt1 = GUICtrlCreateButton('Далее', 250, 250, 100)
$iButt2 = GUICtrlCreateButton('Обратно', 140, 250, 100)
$iButt3 = GUICtrlCreateButton('Папки', 330, 60, 50, 23)
$iInput = GUICtrlCreateInput(_ProgramFilesDir(), 20, 60, 300, 23)
GUICtrlSetBkColor(-1, 0xFFFED8)
$iGroup = GUICtrlCreateGroup('', 30, 130, 340, 66)
$iRadio1 = GUICtrlCreateRadio('Архив x86', 90, 155, -1, 20)
$iRadio2 = GUICtrlCreateRadio('Архив x64', 220, 155, -1, 20)
GUICtrlSetState($iRadio1, $GUI_CHECKED)
$iProgress = GUICtrlCreateProgress(20, 60, 300, 23)
GUICtrlSetState(-1, $GUI_HIDE)
_ElementsSetState(1)
GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
GUICtrlSetOnEvent($iButt1, '_Butt1')
GUICtrlSetOnEvent($iButt2, '_Butt2')
GUICtrlSetOnEvent($iButt3, '_Butt3')
GUISetState()
While Sleep(200)
If $iStart Then
; Прогрессбар наполняется
$iSize = DirGetSize($sMyProgDir)
GUICtrlSetData($iProgress, $iSize * 100 / $iArchiveSize)
If $iSize >= $iArchiveSize Then
;~ FileCreateShortcut() ; Распаковка законсена. Здесь вы создаете ярлык
Sleep(1000)
MsgBox(4096 + 64, 'Ура!', 'Готово', 0, $hGUI)
DirRemove($sTempDir, 1)
Exit
EndIf
EndIf
WEnd
Func _Butt1()
Local $iFI
Switch $iElements
Case 1
_ElementsSetState(2)
Case 2
_ElementsSetState(3)
If Not DirCreate($sTempDir) Then Exit MsgBox(4096 + 16, 'Ошибка!', 'Не удалось создать временный каталог.')
$sMyProgDir = GUICtrlRead($iInput)
;DirRemove($sMyProgDir) ; Перед распоковкой удаляем каталог, если таковой имеется (при желании).
If Not DirCreate($sMyProgDir) Then Exit MsgBox(4096 + 16, 'Ошибка!', 'Не удалось создать папку назначения.')
If GUICtrlRead($iRadio1) = $GUI_CHECKED Then
$iFI = FileInstall('.\Resurses\Archive_x86.exe', $sTempDir & $iArchive)
Else
$iArchive = 'Archive_x64.exe' ; ... Архив x64
$iArchiveSize = 7000000 ; .......... Размер файлов в архиве (в байтах)
$iFI = FileInstall('.\Resurses\Archive_x64.exe', $sTempDir & $iArchive)
EndIf
$iStart = 1
If Not $iFI Then
MsgBox(4096 + 16, 'Ошибка!', 'Не удалось скопировать файл во временный каталог.')
_Exit()
EndIf
;~ ...
;~ ... Перед Run() копируете файлы для бекапа и удаляете некоторые файлы из папки в которую идет распаковка.
;~ ...
$iPID = Run($sTempDir & $iArchive & ' -y -aoa -o"' & $sMyProgDir & '\"', '', @SW_HIDE)
If Not ProcessWait($iPID, 10) Then
MsgBox(4096 + 16, 'Ошибка!', 'Архив не может быть распакован.')
_Exit()
EndIf
Case 3
_Exit()
EndSwitch
EndFunc ;==>_Butt1
Func _Butt2()
_ElementsSetState(1)
EndFunc ;==>_Butt2
Func _Butt3()
GUICtrlSetData($iInput, _ProgramFilesDir(1))
EndFunc ;==>_Butt3
Func _ProgramFilesDir($i = 0)
Local $MyDir, $PFDir = @ProgramFilesDir
If $i Then
$MyDir = FileSelectFolder('Выберите папку установки', $PFDir, 7, '', $hGUI)
If $MyDir Then $PFDir = $MyDir
EndIf
Return $PFDir & $sMyProgDir
EndFunc ;==>_ProgramFilesDir
Func _ElementsSetState($i = 1)
Switch $i
Case 1
$iState1 = $GUI_HIDE
$iState2 = $GUI_SHOW
$sLabText = 'Всем привет:'
Case 2
$iState1 = $GUI_SHOW
$iState2 = $GUI_HIDE
$sLabText = 'Куда распаковываем:'
Case 3
$iState1 = $GUI_HIDE
$iState2 = $GUI_HIDE
$sLabText = 'Ждем:'
GUICtrlSetData($iButt1, 'Отмена')
GUICtrlSetState($iProgress, $GUI_SHOW)
EndSwitch
GUICtrlSetState($iInput, $iState1)
GUICtrlSetState($iButt2, $iState1)
GUICtrlSetState($iButt3, $iState1)
GUICtrlSetState($iGroup, $iState1)
GUICtrlSetState($iRadio1, $iState1)
GUICtrlSetState($iRadio2, $iState1)
GUICtrlSetData($iLabel1, $sLabText)
GUICtrlSetState($iLabel2, $iState1)
GUICtrlSetState($iLabel3, $iState2)
$iElements = $i
EndFunc ;==>_ElementsSetState
Func _Exit()
If $iStart Then
If ProcessExists($iPID) Then ProcessClose($iPID)
DirRemove($sMyProgDir, 1)
DirRemove($sTempDir, 1)
EndIf
Exit
EndFunc ;==>_Exit