Что нового

Файл собранного EXE больше с каждой версией

Tosyk

Новичок
Сообщения
206
Репутация
0
Что я пытаюсь выполнить?
с каждой новой версией автоита, собираемый екзешник увеличивается в размере. на версии 3.2.2.0 мой EXE около 200кб, а на последней версии автоита уже больше мегабайта

Как я это пытался/ась выполнить?
утснавливал разные версии автоита и собирал один и тот же скрипт, вот он:
Код:
#include <File.au3>
;~ #include <MsgBoxConstants.au3>
#Include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

AutoItSetOption("MustDeclareVars", 1)
HotKeySet("{ESC}", "Terminate")


Local $i
Local $sSourceFile, $sDestFile, $sRunWait, $sParams, $iMax, $sNewFileName, $Form1, $ProgressBar1, $Label, $Progress, $Progress1, $gamVal, $CheckKeepAlpha, $v1
Local $sDrive, $sFolder, $sFileName, $sExt

Local $sIMConv = 'magick.exe', $sIMPathFull = 'C:\Program Files\ImageMagick\', $sIMPath = FileGetShortName($sIMPathFull & $sIMConv) ; path to image magick tools

Local $Exts = "tga|jpg|bmp|dds|png|tif|jpeg", $sPattern = "\.(?i:" & $Exts & ")"  ; supported input file extensions

Local $ExtOutput = "png"

If $CmdLine[0] <> 0 Then
   If FileExists($sIMPath) Then
	  ProcessFiles()
   Else
	  MsgBox(0, $sIMConv & " not found", "File [" & $sIMPathFull & $sIMConv & "] not found" & @CRLF)
	  ConsoleWrite("Download Image Magick: " & $sIMConv & " to use this tool." & @CRLF)
   EndIf
Else
   MsgBox(0, "Usage", "Drop file(s) on " & @ScriptName)
   ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf

Func ProcessFiles()
   #Region ### START Koda GUI section ### Form=
   $Form1 = GUICreate("Converting files...", 300, 185, -1, -1);, $WS_POPUP) ;, $WS_EX_TOOLWINDOW)
   Local $Group1 = GUICtrlCreateGroup("Set gamma", 8, 5, 284, 56)
   $gamVal = GUICtrlCreateInput("1.3", 20, 28, 260, 22)
   $CheckKeepAlpha = GUICtrlCreateCheckbox("Keep alpha channel", 20, 68, 200, 17)
   $Label = GUICtrlCreateLabel("", 20, 94, 220, 20, $SS_LEFT) ;, $WS_EX_TOPMOST)
   $Progress1 = CreateProgress(20, 115, 260, 20)
   Local $Button1 = GUICtrlCreateButton("Start", 206, 150, 75, 25)
   GUISetState(@SW_SHOW)

   #EndRegion ### END Koda GUI section ###

   While 1
	  Switch GUIGetMsg()
		 Case $GUI_EVENT_CLOSE
			ExitLoop
		 Case $Button1
			ExitLoop
	  EndSwitch
   WEnd

   For $i = 1 To $CmdLine[0]
	  $sSourceFile = $CmdLine[$i]
	  _PathSplit($sSourceFile, $sDrive, $sFolder, $sFileName, $sExt)
	  GUICtrlSetData($ProgressBar1, ($i / $CmdLine[0]) * 100)

	  If FileExists($sSourceFile) Then
		 If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) = 1 Then
			Settings() ; function of settings
			ConsoleWrite("Full converting path: " & $sRunWait & @LF)
			RunWait(@ComSpec & ' /c ' & $sRunWait, '', @SW_HIDE)
		 Else
			ProgressOff()
			MsgBox(0, "Incorrect extension", "Extension of file [" & $sFileName & "] is [" & $sExt & "] and not in [" & $Exts & "]" & @CRLF)
			ConsoleWriteError("Extension of file [" & $sSourceFile & "] is [" & $sExt & "] and not in [" & $sPattern & "]" & @CRLF)
		 EndIf
	  Else
		 ConsoleWriteError("File [" & $sSourceFile & "] not found" & @CRLF)
	  EndIf
	  UpdateProgress($Progress1, ($i / $CmdLine[0]) * 100)
	  GUICtrlSetData($Label, $sFileName & $sExt)
	  Sleep(650)
   Next
   GUICtrlSetData($Label, "Converting complete")
   Sleep(1000)
EndFunc   ;==>ProcessFiles

Func Settings()
   If _IsChecked($CheckKeepAlpha) Then
	  $v1 = ' '
   Else
	  $v1 = ' ' & '-alpha off' & ' '
   EndIf

   $sSourceFile = '"' & $sSourceFile & '"'
   $sParams = '-gamma' & ' ' & GUICtrlRead($gamVal) & ',' & GUICtrlRead($gamVal) & ',' & GUICtrlRead($gamVal) & $v1 & '-colorspace sRGB'
   $sNewFileName = ($sFileName & '.' & $ExtOutput)
   $sDestFile = '"' & $sDrive & StringTrimRight($sFolder, 1) & '\' & $sNewFileName & '"'

   $sRunWait = $sIMPath & " " & $sSourceFile & " " & $sParams & " " & $sDestFile
EndFunc   ;==>Settings

;---------------------------------------------------------------
;- Enhanced Progress widget
;---------------------------------------------------------------
Func CreateProgress($x, $y, $w, $h, $Label="")
	  Dim $Progress[2]
	  $Progress[0] = GuiCtrlCreateProgress($x, $y, $w, $h) ; this is progress bar
	  $Progress[1] = GuiCtrlCreateLabel($Label, $x+0, $y-21, '', '', $SS_RIGHT) ; this is percentage label
	  GUICtrlSetFont($Progress[1], 11, 500, 0, "")
	  GUICtrlSetBkColor($Progress[1], $GUI_BKCOLOR_TRANSPARENT)
	  Return $Progress
EndFunc

Func UpdateProgress($ProgressID, $Percent, $Label="")
	  GUICtrlSetData($ProgressID[0], $Percent)
	  GUICtrlSetData($ProgressID[1], $Label & Round($Percent, 1) & "%")
   EndFunc

Func _IsChecked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_IsChecked

Func Terminate()
   Exit
EndFunc   ;==>Terminate

Exit(0)


Что я ожидаю от выполненных действии?
можно ли как-то сохранить размер EXE в пределах 200кб в новых версиях автоита?

Что происходит на самом деле?
на последних версиях автоита собранный EXE весит больше мегабайта
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Не пробовали сжимать упаковщиком?
Размер исполняемого файла не сильно зависит от скрипта. Autoit не имеет компилятора. Он помещает скрипт в интерпретатор который имеет фиксированный размер.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
Использую последнюю версию автоита с сайта:

если в редакторе жму F7 то получаю 900кб
если собираю при помощи Aut2exe.exe то получаю чуть больше магабайта (настройки: /x64 /comp 4)
 

Sergio

Новичок
Сообщения
41
Репутация
3
Минимальный размер, который я получал - 370кб. Меньше получить, думаю уже очень сложно
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
смысл в уменьшенном файле? или на дискетку не помещается :smile:
основную массу составляет файл AutoIt интерпретатор. естественно, с каждой версией он может быть больше.
у меня версия 3.3.12.0
компилировал через враппер
Код:
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=y

на выходе 413 кб.
убрал включаемые библиотеки. для этого нужно вписать нужные константы в код. в данном коде это константы статических элементов
и вписать функцию деления пути к файлу. на выходе получилось 369кб
использовал не враппер, а директивы компилятора
Код:
#pragma compile(UPX, True)
#pragma compile(Compression, 9)

хотя, это тоже самое что и с враппером.
вывод, если есть возможность, то исключать подключаемые библиотеки. то есть, вписывать константы в сам код, копировать только нужные функции из библиотек. либо писать свои функции, облегченные, конкретно под текущую задачу. это позволит уменьшить размер кода. порою ощутимо

если, сделав все эти манипуляции, конвертировать в х64, то выходной файл вырастает заметно - 939кб.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
спасибо, полезно знать! а как понять какие мне константы вписывать? откуда их брать?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Смотреть подключаемые библиотеки
 
Верх