So, da ich heute im Forum einen Setup-Thread gesehen habe, dachte ich mir, das kann ich auch, und hoffentlich (Feedback ) besser.
In der ZIP ist die Au3-Daei, die ini-Datei, die ihr beliebig anpassen könnt, eine leere(!) Lizenzdatei sowie ein Testordner DATA, in den die zu installierenden Dateien reinkommen.
Ich bitte um Namensnennung bei eventueller Verwendung.
Ich benutze die _FileListTreeToArray-Funktion von senthor.
Features
Voll customisierbar, mit Ini und Lizenzdatei (updated)
inkl. Bild
Weiche Überblendungen zwischen den Schritten (probierts aus)
Wenn erwünscht (-->Ini) Mögliuchkeit zur eintragung in den Autostart
"Nach Fertigstellen öffnen"-Funktion
Abbruch-Sicherheitsabfrage added
EULA-Fehler behoben.
Uninstallregisrtrierung
Helpfile:)
NEU in dieser Version:
Serialunterstützung
Wishlist
von mir:
von euch:
Serial (erledigt)
Helpfile zum Ini-system
HELPFILE zum Ini-System.
3 Möglichkeiten:
Keine ini-Datei:
In dem Fall macht das Setup alles mit Standartvorgaben (nicht empfohlen)
1 ini-Datei:
Möchtet ihr keinen Multi-languagesupport bieten, genügt eine ini-Datei
Sie MUSS "install.ini" heißen.
Ignoriert die Zeichen * und +, alles kommt in die "install.ini"
2 ini-Dateien:
Möchtet ihr Multi-languagesupport bieten, braucht ihr mindestens drei ini-Dateien:
"install.ini" (für das Definieren der verschiedenen Sprachen)
2 Sprach-ini-Dateien, z.B. "de.ini" und "en.ini", in denen die Infos jeweils sprachspezifisch stehen.
In den Sprachinis stehen Eigenschaften, die ich mit * gekennzeichnet habe
in der install.ini stehen Eigenschaften, die ich mit + gekennzeichnet habe
Los geht's:
[global]
+ langtitle Titel der Sprachauswahl, z.B. Choose Language
+ langprompt Text der Sprachauswahl, z.B. Please choose your language.
+ langs Alle Sprachkürzel mit |-Trenner, z.B. de|en|dk
+ company "Firma", also z.B. MyScripts
+ program Programmname ohne Versionsnummer, z.B. MyBadbadBot ;Der Installationsordner ist standartmäßig @Programfiles\company\program
+ url Herstellerwebsite, z.B. http://www.autoit.de (incl http://)
+ forcedprognameaslastdir Wahrheitswert (1=True;0=False) Dieser gibt an, ob der letzte Ordner in der Installordnerhierarchie der des Programmnamens sein muss
+ autostartpossible Wahrheitswert, ob die Checkbox "Autostart?" angezeigt wird.
+ exePath relativer Pfad zur exe, innerhalb von DATA. Wird für z.B. Autostart und nach-der-Installation-ausführen benötigt, z.B. program.exe
+ uninstall relativer Pfad zur deinstall-exe, innerhalb von DATA. Wird für Deinstallationseintrag benötigt, z.B. program.exe -uninstall
+ registeruninstall Wahrheitswert, ob ein Deinstallationseintrag registriert werden soll.
+ version Version, z.B. 1.0
* licensefile Eula/Lizenzdatei, z.B. EULA.txt (im Ordner selbst, nicht im DATA-Ordner) Ihr könnt natürlich pro Sprache eine EULA machen
* picture Linkes Bild, 150*450px, bmp/jpg, z.B. topleft.bmp
* title Titel des Setups, z.B. Setup - "iPhones abballern"-Spiel
* cancelwarning Text beim Versuch zu beenden, z.B. Möchten Sie das Setup wirklich abbrechen?
[welcome]
* text Text der ersten Seite, z.B. Willkommen
* errortext Text, der zusätzlich kommt, wenn man ablehnt, z.B. Sie müssen die Bedingungen akzeptieren, wenn Sie das Programm installieren möchten.
[options]
* text Text der zweiten Seite, z.B. Wählen Sie die Optionen
[installation]
* text Text während der Installation, z.B. Installation läuft...
[finalize]
* text Text beim abschließenden Fenster, z.B. Installation abgeschlossen
Achtung: Code ist nur zum Angucken gedacht, wenn ihrs ausprobieren wollt, ladet bitte die ZIP incl. EULA & ini
code
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GuiEdit.au3>
#include <EditConstants.au3>
#include <FileEx.au3> ; by senthor (autoit.de)
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region CONFIGVARS
$CFGLangTitle=IniRead("install.ini","global","langtitle","Choose language")
$CFGLangPrompt=IniRead("install.ini","global","langprompt","Please choose your language.")
$CFGini=_lang(StringSplit(IniRead("install.ini","global","langs","de"),"|")) & ".ini"
$CFGlegaltxt=IniRead($CFGini,"global","licensefile","EULA.txt")
$CFGlegal=FileRead($CFGlegaltxt)
$CFGPic=IniRead($CFGini,"global","picture","topleft.bmp")
$CFGTitle=IniRead($CFGini,"global","title","Setup")
$CFGVersion=IniRead($CFGini,"global","version","1.0")
$CFGWelcomeText=IniRead($CFGini,"welcome","text","Willkommen")
$CFGOPtionsText=IniRead($CFGini,"options","text","Wählen Sie die Optionen")
$CFGLicenseAcceptText=IniRead($CFGini,"welcome","errortext","Sie müssen die Bedingungen akzeptieren, wenn Sie das Programm installieren möchten.")
$CFGInstallText=IniRead($CFGini,"installation","text","Installation läuft...")
$CFGFinalizeText=IniRead($CFGini,"finalize","text","Installation abgeschlossen")
$CFGCancelWarning=IniRead($CFGini,"global","cancelwarning","Möchten Sie das Setup wirklich abbrechen?")
$CFGcompany=IniRead("install.ini","global","company","AutoItScript")
$CFGprogname=IniRead("install.ini","global","program","MyProgram")
$CFGurl=IniRead("install.ini","global","url","http://www.autoit.de")
$CFGlastFOLDERhastobemine=IniRead("install.ini","global","forcedprognameaslastdir",False)
$CFGAutoStartPoss=IniRead("install.ini","global","autostartpossible",False)
$CFGAutoStartExe=IniRead("install.ini","global","exePath","")
$CFGuninstall=IniRead("install.ini","global","uninstall","")
$CFGregisteruninstall=IniRead("install.ini","global","registeruninstall",0)
$CFGkey=IniRead("install.ini","global","useserial",False)
#EndRegion CONFIGVARS
Global $next=1,$folder,$finalize=False,$KEY=""
;DEBUG:
If $CFGkey Then _getkey()
#Region ### START Koda GUI section ### Form=
$SetupGUI = GUICreate($CFGTitle, 633, 451, 193, 125)
$picleft = GUICtrlCreatePic($CFGPic, 0, 0, 150, 450, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
$Label = GUICtrlCreateLabel($CFGWelcomeText, 168, 16, 500, 50)
$legaledit = GUICtrlCreateEdit("", 160, 96, 457, 305,BitOr($WS_VSCROLL,$ES_READONLY))
GUICtrlSetData(-1, $CFGlegal)
$folderinput=GUICtrlCreateInput(@ProgramFilesDir & "\" & $CFGcompany & "\" & $CFGprogname,160,96,250,20,$ES_READONLY)
$folderbutton=GUICtrlCreateButton("Durchsuchen...",415,96,100,20)
$autostartCheckBox=GUICtrlCreateCheckbox("Automatisch mit Windows starten",200,196,250)
$installprogressbar=GUICtrlCreateProgress(160,408,457)
$forwardbutton = GUICtrlCreateButton("Ich stimme zu >", 472, 408, 145, 33, 0)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$backbutton = GUICtrlCreateButton("Ich lehne ab", 312, 408, 153, 33, 0)
$cancelbutton = GUICtrlCreateButton("Abbrechen", 160, 408, 145, 33, 0)
GUICtrlSetState($folderbutton,$GUI_HIDE)
GUICtrlSetState($installprogressbar,$GUI_HIDE)
GUICtrlSetState($folderinput,$GUI_HIDE)
GUICtrlSetState($autostartCheckBox,$GUI_HIDE)
WinSetTrans($CFGTitle,"",0)
GUISetState(@SW_SHOW)
For $i=0 To 255 step 5
WinSetTrans($CFGTitle,"",$i)
Next
#EndRegion ### END Koda GUI section ###
$blendGUI=GUICreate("blend",633,451,Default,Default,$WS_POPUP,$WS_EX_TOOLWINDOW);,+3left,+29top
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
If MsgBox(52,$CFGTitle,$CFGCancelWarning) = 6 Then _exit()
Case $SetupGUI
Case $folderbutton
$folder=FileSelectFolder("Installationsordner auswählen","",7)
;RegEx fehlt noch
If $folder = "" Then ContinueLoop
If $CFGlastFOLDERhastobemine And (StringRight($folder,Stringlen($CFGprogname)) <> $CFGprogname) Then $folder &= "\" & $CFGprogname
$folder=StringReplace($folder,"\\","\")
GUICtrlSetData($folderinput,$folder)
Case $Label
Case $legaledit
Case $forwardbutton
_next($next)
Case $backbutton
$next-=2
_next($next)
Case $cancelbutton
If MsgBox(52,$CFGTitle,$CFGCancelWarning) = 6 Then _exit()
EndSwitch
If $finalize Then _next($next)
WEnd
Func _blendon()
$pos=WinGetPos($CFGTitle)
WinMove("blend","",$pos[0]+3,$pos[1]+29)
WinSetTrans("blend","",0)
GUISetState(@SW_SHOW,$blendGUI)
WinSetOnTop("blend","",1)
WinActivate($CFGTitle)
For $i=0 To 255 step 5
WinSetTrans("blend","",$i)
Next
EndFunc
Func _blendoff()
For $i=255 To 0 step -5
WinSetTrans("blend","",$i)
Next
GUISetState(@SW_HIDE,$blendGUI)
WinSetOnTop("blend","",0)
WinActivate($CFGTitle)
EndFunc
Func _next(byref $next)
_blendon()
Switch $next
Case 0
GUICtrlSetState($folderbutton,$GUI_HIDE)
GUICtrlSetState($folderinput,$GUI_HIDE)
GUICtrlSetState($autostartCheckBox,$GUI_HIDE)
GUICtrlSetState($legaledit,$GUI_SHOW)
GUICtrlSetData($Label,$CFGWelcomeText & @CRLF & @CRLF & $CFGLicenseAcceptText)
GUICtrlSetData($forwardbutton,"Ich stimme zu >")
GUICtrlSetData($backbutton,"< Ich lehne ab")
GUICtrlSetData($cancelbutton,"Abbrechen")
GUICtrlSetData($legaledit, $CFGlegal)
If $CFGkeyURL <> "" Then _getKey()
Case 1
GUICtrlSetState($folderbutton,$GUI_SHOW)
GUICtrlSetState($folderinput,$GUI_SHOW)
If $CFGAutoStartPoss Then GUICtrlSetState($autostartCheckBox,$GUI_SHOW)
GUICtrlSetState($legaledit,$GUI_HIDE)
GUICtrlSetData($Label,$CFGOPtionsText)
GUICtrlSetData($forwardbutton,"Installieren >")
GUICtrlSetData($backbutton,"< Zurück")
GUICtrlSetData($cancelbutton,"Abbrechen")
Case 2
$folder=GUICtrlRead($folderinput)
GUICtrlSetState($folderbutton,$GUI_HIDE)
GUICtrlSetState($folderinput,$GUI_HIDE)
GUICtrlSetState($autostartCheckBox,$GUI_HIDE)
GUICtrlSetState($legaledit,$GUI_SHOW)
GUICtrlSetData($Label,$CFGInstallText)
GUICtrlSetState($cancelbutton,$GUI_HIDE)
GUICtrlSetState($forwardbutton,$GUI_HIDE)
GUICtrlSetState($backbutton,$GUI_HIDE)
GUICtrlSetState($installprogressbar,$GUI_SHOW)
;~ GUICtrlSetData($cancelbutton,"Abbrechen")
_install()
$finalize=True
;~ _blendon()
Case 3
;~ exit;DEBUG
GUICtrlSetState($legaledit,$GUI_HIDE)
GUICtrlSetState($installprogressbar,$GUI_HIDE)
GUICtrlSetData($Label,$CFGFinalizeText)
GUICtrlSetData($forwardbutton,"Fertigstellen")
GUICtrlSetState($forwardbutton,$GUI_SHOW)
GUICtrlSetState($autostartCheckBox,$GUI_SHOW)
GUICtrlSetData($autostartCheckBox,"Programm beim Klick auf Fertigstellen ausführen")
$finalize=False
Case 4
_finalize()
Case Else
$next=0
GUICtrlSetState($folderbutton,$GUI_HIDE)
GUICtrlSetState($folderinput,$GUI_HIDE)
GUICtrlSetState($autostartCheckBox,$GUI_HIDE)
GUICtrlSetState($legaledit,$GUI_SHOW)
GUICtrlSetData($Label,$CFGWelcomeText & @CRLF & @CRLF & $CFGLicenseAcceptText)
GUICtrlSetData($forwardbutton,"Ich stimme zu >")
GUICtrlSetData($backbutton,"Ich lehne ab")
GUICtrlSetData($cancelbutton,"Abbrechen")
GUICtrlSetData($legaledit, $CFGlegal)
EndSwitch
$next+=1
_blendoff()
EndFunc
Func _log($data=@CRLF)
If $data = -1 Then
GUICtrlSetData($legaledit,"")
Return
EndIf
GUICtrlSetData($legaledit,GUICtrlRead($legaledit) & @CRLF & $data)
_GUICtrlEdit_LineScroll($legaledit, 0, _GUICtrlEdit_GetLineCount($legaledit))
EndFunc
Func _install()
_blendoff()
$folder=StringReplace($folder,"\\","\")
DirCreate($folder)
;~ FileCopy(@ScriptDir & "\data\*",$folder,9);So wärs zu einfach...;-)
_log("Erstelle Liste der zu kopierenden Dateien...")
$files=_FileListTreeToArray(@ScriptDir & "\data")
If not IsArray($files) Then _nodata()
For $i=1 To $files[0]
_log("Kopiere " & $files[$i] & " ...")
FileCopy($files[$i],$folder)
GUICtrlSetData($installprogressbar,100*($i/$files[0]))
sleep(100);DEBUG
Next
_log("Finalisieren...")
If $CFGAutoStartPoss And GUICtrlRead($autostartCheckBox) = $GUI_CHECKED Then RegWrite("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",$CFGprogname,StringReplace($CFGcompany & "\" & $CFGAutoStartExe,"\\","\"))
If $CFGregisteruninstall and IsAdmin() and $CFGuninstall <> "" Then
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & $CFGcompany & " " & $CFGprogname,"DisplayName","REG_SZ",$CFGcompany & " " & $CFGprogname)
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & $CFGcompany & " " & $CFGprogname,"DisplayVersion","REG_SZ",$CFGversion)
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & $CFGcompany & " " & $CFGprogname,"Publisher","REG_SZ",$CFGcompany)
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & $CFGcompany & " " & $CFGprogname,"UninstallString","REG_SZ",$CFGcompany & "\" & $CFGuninstall)
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & $CFGcompany & " " & $CFGprogname,"URLInfoAbout","REG_SZ",$CFGurl)
EndIf
_log("Fertig!")
GUICtrlSetData($installprogressbar,100)
EndFunc
Func _finalize()
For $i=255 To 0 step -5
WinSetTrans($CFGTitle,"",$i)
Next
If GUICtrlRead($autostartCheckBox) = $GUI_CHECKED Then Run(StringReplace($CFGcompany & "\" & $CFGAutoStartExe,"\\","\"))
Exit
EndFunc
Func _exit()
For $i=255 To 0 step -5
WinSetTrans($CFGTitle,"",$i)
Next
Exit
EndFunc
Func _lang($langs)
If $langs[0]=0 Then return "install"
$langGUI = GUICreate("Choose lang", 218, 118, 451, 428) ;$CFGLangTitle
$langCombo = GUICtrlCreateCombo(IniRead($langs[1] & ".ini","global","languagename","Standartsprache"), 40, 40, 129, 25,$CBS_DROPDOWNLIST)
$OKButton = GUICtrlCreateButton("Ok", 8, 72, 89, 33, $BS_DEFPUSHBUTTON)
$CancelButton = GUICtrlCreateButton("Abbrechen", 112, 72, 97, 33, 0)
GUICtrlCreateLabel("Choose language", 8, 8, 130, 17);$CFGlangprompt
For $i=1 To $langs[0]
GUICtrlSetData($langCombo,IniRead($langs[$i] & ".ini","global","languagename","Standartsprache"),IniRead($langs[1] & ".ini","global","languagename","Standartsprache"))
Next
GUISetState(@SW_SHOW)
While True
Switch GUIGetMsg()
Case $OKButton
$chosen=GUICtrlRead($langCombo)
For $i=1 To $langs[0]
If Iniread($langs[$i] & ".ini","global","languagename","Standartsprache") = $chosen Then
GUIDelete($langGUI)
Return $langs[$i]
EndIf
Next
Exit -1
Case $CancelButton
exit
EndSwitch
WEnd
EndFunc
Func _nodata()
MsgBox(0,"Error","Nothing to install")
Exit
EndFunc
Func _getkey()
dim $counter =0,$num1=True,$num2=true,$num3=True,$num4=True,$num5=True,$exitloop=False
$Form1 = GUICreate("Seriennummer eingeben", 351, 116, 505, 495)
$Label1 = GUICtrlCreateLabel("Seriennummer eingeben", 0, 8, 345, 17,$SS_CENTER)
$Label2 = GUICtrlCreateLabel("___________________________________________", 56, 40, 262, 17)
GUICtrlSetState(-1, $GUI_DISABLE)
$Input1 = GUICtrlCreateInput("", 16, 40, 57, 21,BitOr($ES_UPPERCASE,$ES_CENTER))
GUICtrlSetLimit(-1,5)
$Input2 = GUICtrlCreateInput("", 80, 40, 57, 21,BitOr($ES_UPPERCASE,$ES_CENTER))
GUICtrlSetLimit(-1,5)
GUICtrlSetState(-1,$GUI_DISABLE)
$Input3 = GUICtrlCreateInput("", 144, 40, 57, 21,BitOr($ES_UPPERCASE,$ES_CENTER))
GUICtrlSetLimit(-1,5)
GUICtrlSetState(-1,$GUI_DISABLE)
$Input4 = GUICtrlCreateInput("", 208, 40, 57, 21,BitOr($ES_UPPERCASE,$ES_CENTER))
GUICtrlSetLimit(-1,5)
GUICtrlSetState(-1,$GUI_DISABLE)
$Input5 = GUICtrlCreateInput("", 272, 40, 57, 21,BitOr($ES_UPPERCASE,$ES_CENTER))
GUICtrlSetLimit(-1,5)
GUICtrlSetState(-1,$GUI_DISABLE)
$Button1 = GUICtrlCreateButton("Ok", 56, 72, 97, 25, $BS_DEFPUSHBUTTON)
$Button2 = GUICtrlCreateButton("Abbrechen", 176, 72, 105, 25, 0)
GUISetState(@SW_SHOW)
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $Input1
Case $Input2
Case $Input3
Case $Input4
Case $Input5
Case $Button1
$exitloop=True
Case $Button2
If MsgBox(52,$CFGTitle,$CFGCancelWarning) = 6 Then exit
EndSwitch
If StringLen(GUICtrlRead($Input1))=5 and $num1 Then
GUICtrlSetState($Input2,BitOr($GUI_ENABLE,$GUI_FOCUS))
$num1=False
EndIf
If StringLen(GUICtrlRead($Input2))=5 and $num2 Then
GUICtrlSetState($Input3,BitOr($GUI_ENABLE,$GUI_FOCUS))
$num2=False
EndIf
If StringLen(GUICtrlRead($Input3))=5 and $num3 Then
GUICtrlSetState($Input4,BitOr($GUI_ENABLE,$GUI_FOCUS))
$num3=False
EndIf
If StringLen(GUICtrlRead($Input4))=5 and $num4 Then
GUICtrlSetState($Input5,BitOr($GUI_ENABLE,$GUI_FOCUS))
$num4=False
EndIf
If StringLen(GUICtrlRead($Input5))=5 and $num5 Then
GUICtrlSetState($Button1,$GUI_FOCUS)
$num5=False
EndIf
If $ExitLoop Then
If not (StringLen(GUICtrlRead($Input1))=5 and StringLen(GUICtrlRead($Input2))=5 and StringLen(GUICtrlRead($Input3))=5 and StringLen(GUICtrlRead($Input4))=5 and StringLen(GUICtrlRead($Input5))=5) Then
$exitloop=False
ContinueLoop
EndIf
$KEY &=GUICtrlRead($Input1)
$KEY &=GUICtrlRead($Input2)
$KEY &=GUICtrlRead($Input3)
$KEY &=GUICtrlRead($Input4)
$KEY &=GUICtrlRead($Input5)
MsgBox(64,"Seriennummer[DEVELOP]",$KEY)
If IsAdmin() Then
RegWrite("HKLM\Software\" & $CFGcompany & "\" & $CFGprogname,"serial","REG_SZ",$KEY)
Else
RegWrite("HKCU\Software\" & $CFGcompany & "\" & $CFGprogname,"serial","REG_SZ",$KEY)
EndIf
GUIDelete()
ExitLoop
EndIf
WEnd
EndFunc
Ach, und die Sleeps bei der Installation sind nur provisorisch, zu Demozwecken, sonst wärs zu schnell.
Greez, L3viathan2142
Hoffe, es gefällt.
Alte Version 24mal geladen
Alte Version 5mal geladen
Alte Version 23mal geladen
Alte Version 31mal geladen
Alte Version 5mal geladen
Alte Version 7mal geladen