- Сообщения
- 3,556
- Репутация
- 628
AutoIt: 3.3.12.0
Категория: Вспомогательные функции
Описание: Это не проект, скорее всего, размышления на тему.
Если программа небольшая, то можно использовать инструменты AutoIT для создания своего инсталятора своей программы. Использовал примеры из справки SciTE4AutoIt3 (Adding data to the program resources ). Файл kit это конструктор. Выбираем папку с файлами. Файл code это основная часть программы для распаковки файлов.
Запускаем kit, указываем папку. Создается файл install.au3. Компилируем его Compile with Options, то есть через AutoIt3Wrapper.
Запускаем программу, указываем папку для распаковки.
Я ни в коем случае не хочу сравнивать данный метод с работой известных инсталяторов софта.
Экспериментировал с файлами общим объемом 2,9 МБ. после комплияции получился файл размером в два раза меньше. естественно не все файлы хорошо сжимаются. да и время добавления файлов не очень маленькое. на упаковку таким образом указанного объема файлов у меня ушло 10 секунд.
kit:
code:
Это не программа - инсталятор, а примеры возможной сборки инсталятора
Источник: autoit-script.ru
Автор(ы): Справка по AutoIT
Категория: Вспомогательные функции
Описание: Это не проект, скорее всего, размышления на тему.
Если программа небольшая, то можно использовать инструменты AutoIT для создания своего инсталятора своей программы. Использовал примеры из справки SciTE4AutoIt3 (Adding data to the program resources ). Файл kit это конструктор. Выбираем папку с файлами. Файл code это основная часть программы для распаковки файлов.
Запускаем kit, указываем папку. Создается файл install.au3. Компилируем его Compile with Options, то есть через AutoIt3Wrapper.
Запускаем программу, указываем папку для распаковки.
Я ни в коем случае не хочу сравнивать данный метод с работой известных инсталяторов софта.
Экспериментировал с файлами общим объемом 2,9 МБ. после комплияции получился файл размером в два раза меньше. естественно не все файлы хорошо сжимаются. да и время добавления файлов не очень маленькое. на упаковку таким образом указанного объема файлов у меня ушло 10 секунд.
kit:
Код:
#include <FileOperations.au3>
$fsf = FileSelectFolder('', '')
If @error Then Exit
$filear = _FO_FileSearch($fsf)
If @error Then Exit
$fo = FileOpen('install.au3', 1)
FileWriteLine($fo, '#include <WinAPI.au3>')
FileWriteLine($fo, '#include <WinAPIRes.au3>')
FileWriteLine($fo, '#AutoIt3Wrapper_Compression=4')
FileWriteLine($fo, '#AutoIt3Wrapper_UseUpx=y')
For $i = 1 To $filear[0]
FileWriteLine($fo, '#AutoIt3Wrapper_Res_File_Add=' & FileGetShortName($filear[$i]) & ', -10')
Next
FileWriteLine($fo, 'Global $array[' & UBound($filear) & ']')
For $i = 1 To $filear[0]
FileWriteLine($fo, '$array[' & $i & ']=' & "'" & StringReplace($filear[$i], $fsf, '') & "'")
Next
$fr = FileRead('code.au3')
FileWrite($fo, $fr)
FileClose($fo)
code:
Код:
$path = FileSelectFolder('', '')
If @error Then Exit
Local $hModRes = _WinAPI_GetModuleHandle(0)
For $i = 1 To UBound($array) - 1
_FileInstallFromResource($hModRes, $i, $path & $array[$i], True)
Next
Func _FileInstallFromResource($hMod, $sResName, $sDest, $isCompressed = False, $iUncompressedSize = Default)
Local $bBytes = _GetResourceAsBytes($hMod, $sResName, $isCompressed, $iUncompressedSize)
If @error Then
FileWriteLine('log.txt', @error)
Return SetError(@error, 0, 0)
EndIf
Local $hFile = FileOpen($sDest, 26)
FileWrite($hFile, $bBytes)
FileClose($hFile)
EndFunc ;==>_FileInstallFromResource
Func _GetResourceAsBytes($hMod, $sResName, $isCompressed = False, $iUncompressedSize = Default)
Local $hRes = _WinAPI_FindResource($hMod, 10, $sResName)
If @error Or Not $hRes Then Return SetError(1, 0, 0)
Local $dSize = _WinAPI_SizeOfResource($hMod, $hRes)
If @error Or Not $dSize Then Return SetError(2, 0, 0)
Local $hLoad = _WinAPI_LoadResource($hMod, $hRes)
If @error Or Not $hLoad Then Return SetError(3, 0, 0)
Local $pData = _WinAPI_LockResource($hLoad)
If @error Or Not $pData Then Return SetError(4, 0, 0)
Local $tBuffer = DllStructCreate("byte[" & $dSize & "]")
_WinAPI_MoveMemory(DllStructGetPtr($tBuffer), $pData, $dSize)
If $isCompressed Then
Local $oBuffer
_WinAPI_LZNTDecompress($tBuffer, $oBuffer, $iUncompressedSize)
If @error Then Return SetError(5, 0, 0)
$tBuffer = $oBuffer
EndIf
Return DllStructGetData($tBuffer, 1)
EndFunc ;==>_GetResourceAsBytes
Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iUncompressedSize = Default)
If $iUncompressedSize = Default Then $iUncompressedSize = 16 * DllStructGetSize($tInput)
Local $tBuffer, $ret
$tOutput = 0
$tBuffer = DllStructCreate("byte[" & $iUncompressedSize & "]")
If @error Then Return SetError(1, 0, 0)
$ret = DllCall("ntdll.dll", "long", "RtlDecompressBuffer", "ushort", 2, "struct*", $tBuffer, "ulong", $iUncompressedSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0)
If @error Then Return SetError(2, 0, 0)
If $ret[0] Then Return SetError(3, $ret[0], 0)
$tOutput = DllStructCreate("byte[" & $ret[6] & "]")
If Not _WinAPI_MoveMemory(DllStructGetPtr($tOutput), DllStructGetPtr($tBuffer), $ret[6]) Then
$tOutput = 0
Return SetError(4, 0, 0)
EndIf
Return $ret[6]
EndFunc ;==>_WinAPI_LZNTDecompress
Это не программа - инсталятор, а примеры возможной сборки инсталятора
Источник: autoit-script.ru
Автор(ы): Справка по AutoIT