Hallo Mitglieder.
Ich habe meinen Launcher/Updater nun zu 90% fertig.
Was noch fehlt, ist eine Favoriten Funktion.
Zu der komme ich aber später.
Mein Update soll die .exe downloaden, die gerade zum downloaden ausgeführt wird.
Da die .exe jedoch geöffnet ist, kann er diese also nicht ersetzten.
Ich wollte gerne wissen, ob man dies irgendwie beheben kann.
Hier mal mein Script.
Spoiler anzeigen
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=Icon.ico
#AutoIt3Wrapper_outfile=Launcher.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#Region
#EndRegion
; ================================;
; Minecraft Launcher
; Made by Aldeos
; © 2011 Aldeos.de
; ================================;
;====Includes====;
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
If Not FileExists(@AppDataDir & "\.minecraft\Splash.jpg") Then FileInstall("Splash.jpg", @AppDataDir & "\.minecraft\Splash.jpg") ;- Fragt ab, ob Splash.bmp existiert, falls nicht installiert er diese Datei.
If Not FileExists(@AppDataDir & "\.minecraft\Minecraft.exe") Then FileInstall("Minecraft.exe", @AppDataDir & "\.minecraft\Minecraft.exe") ;- Fragt ab, ob Minecraft.exe existiert, falls nicht installiert er diese Datei.
;====GUI====;
$GUI = GUICreate("Minecraft Launcher by Aldeos.de", 401, 231, 273, 176) ;- Erstellt die GUI.
$NAME = GUICtrlCreateLabel("Login:", 104, 42, 33, 17) ;- Erstellt den Label "Login:".
$NAME_READ = IniRead(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "NAME", "") ;- Liest aus der Launcher.ini die Wert NAME aus der Sektion Config.
$NAME_INPUT = GUICtrlCreateInput($NAME_READ, 160, 40, 121, 21) ;- Erstellt ein Eingabefeld für den Namen.
$PASSWORD = GUICtrlCreateLabel("Password:", 104, 70, 53, 17) ;- Erstellt den Label "Password:".
$PASS_READ = IniRead(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "PASS", "");- Liest aus der Launcher.ini die Wert PASS aus der Sektion Config.
$PASSWORD_INPUT = GUICtrlCreateInput($PASS_READ, 160, 68, 121, 21, $ES_PASSWORD);- Erstellt ein Eingabefeld für das Password.
$IP = GUICtrlCreateLabel("IP:", 104, 98, 17, 17) ;- Erstellt den Label "IP:".
$IP_READ = IniRead(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "IP", "");- Liest aus der Launcher.ini die Wert IP aus der Sektion Config.
$IP_INPUT = GUICtrlCreateInput($IP_READ, 160, 96, 121, 21);- Erstellt ein Eingabefeld für die IP.
$START = GUICtrlCreateButton("Start", 194, 128, 89, 25, $WS_GROUP) ;- Erstellt einen Button mit der Aufschrift "Start" zum starten des Spieles.
$UPDATE = GUICtrlCreateButton("Update", 104, 128, 81, 25, $WS_GROUP) ;- Erstellt einen Button mit der Aufschrift "Update" zum überprüfen auf Updates.
$IMG = GUICtrlCreatePic(@AppDataDir & "\.minecraft\Splash.jpg", 0, 0, 400, 230, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS)) ;- Erstellt das Hintergrundbild für die GUI.
$DL_PROG = GUICtrlCreateProgress(16, 173, 369, 25) ;- Progressbar für den Download.
$DL_LAB = GUICtrlCreateLabel("", 24, 204, 100, 12) ;- Label für den Download.
GUISetState(@SW_SHOW)
;====Variable====;
$ServerINI = @TempDir & "\serverversion.ini"
$LocalINI = @AppDataDir & "\.minecraft\Version.ini"
$upd_url = IniRead($LocalINI, "File", "URL", "")
$sString = BinaryToString(InetRead('http://46.4.146.40/minecraft/updates/serverversion.ini'))
$hFile = FileOpen($ServerINI, 2)
FileWrite($hFile, $sString)
FileClose($hFile)
FileDelete($hFile)
$Ini1 = IniRead($ServerINI, "Update", "VERSION", "")
$Ini2 = IniRead($LocalINI, "Update", "VERSION", "")
$url = IniRead($ServerINI, "File", "URL", "")
$name = IniRead($ServerINI, "File", "NAME", "")
$size = InetGetSize($url & $name)
;====Funktionen====;
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $START
_startcheck()
Case $UPDATE
_updatecheck()
EndSwitch
WEnd
Func _run()
If Not @error Then
$NAME = GUICtrlRead($NAME_INPUT)
$PASS = GUICtrlRead($PASSWORD_INPUT)
$IP = GUICtrlRead($IP_INPUT)
$PASS_READ = IniRead(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "PASS", "")
ShellExecute(@AppDataDir & "\.minecraft\Minecraft.exe", $NAME & " " & $PASS_READ & " " & $IP) ;- Startet die Datei "Minecraft.exe" mit den folgenden Parametern, $NAME_READ, $PASS_READ und $IP_READ.
If Not @error Then
IniWriteSection(@AppDataDir & "\.minecraft\Launcher.ini", "Config", "NAME=" & GUICtrlRead($NAME_INPUT) & @LF & "PASS=" & GUICtrlRead($PASSWORD_INPUT) & @LF & "IP=" & GUICtrlRead($IP_INPUT)) ;- Schreit $NAME_INPUT, $PASSWORD_INPUT und $IP_INPUT in die INI.
Exit
EndIf
EndIf
EndFunc
Func _updatecheck()
If $Ini1 <> $Ini2 Then
$iMsgBoxAnswer = MsgBox(52, "Aktualisierung gefunden!", "Es wurde eine Aktualisierung gefunden." & @CRLF & "Möchten Sie diese herunterladen?")
Select
Case $iMsgBoxAnswer = 6
$download = InetGet($url & $name, $name, 1, 1)
Do
$info = InetGetInfo($download, 0)
$percent = (100 / $size) * $info
GUICtrlSetData($DL_PROG, $percent)
$Old = GUICtrlRead($DL_LAB)
$New = "Geladen:" & Round(($info / 1024) / 1024, 1) & " / " & Round(($size / 1024) / 1024, 1) & "MB"
If $Old <> $New Then GUICtrlSetData($DL_LAB, $New)
Until $percent >= 100
IniWrite ($LocalINI, "Update", "VERSION", $Ini1)
Case $iMsgBoxAnswer = 7
Exit
EndSelect
EndIf
EndFunc ;==>_updatecheck
Func _startcheck()
If $Ini1 <> $Ini2 Then
MsgBox(48,"Version nicht aktuell!","Ihre Version ist nicht aktuell." & @CRLF & "Bitte aktualisieren sie ihren Clienten.")
ElseIf $Ini1 = $Ini2 Then
_run()
EndIf
EndFunc ;==>_startcheck