Guten Tag erstmal,
ich bin momentan dabei einige Setups mit AutoIT zu automatisieren, stoße aber an ein ganz blödes Problem.
Hier erstmal mein Code:
*Edit: Wegen ungünstiger Formatierung hier das Script als au3 file: https://drive.google.com/folderview?id=0B-WkNGnWsbTfUU9wY2JMUHpLUm8&usp=sharing
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****#AutoIt3Wrapper_Icon=install3.ico#AutoIt3Wrapper_Outfile=tst\Multisetupx86.exe#AutoIt3Wrapper_Compression=0#AutoIt3Wrapper_UseX64=n#AutoIt3Wrapper_Res_LegalCopyright=***#AutoIt3Wrapper_Res_Language=1031#AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****#include <Date.au3>
$tempDirName = 'temp'
; Erstellen eines Ordners "temp" für die Setupdateien während der InstallationDirCreate($tempDirName)
[/autoit][autoit][/autoit][autoit]ProgressOn("Multisetup", "Setup wird ausgeführt", "Bitte warten...")
; Funktionen, welche während des Setups genutzt werden#region funcs
#region funcInstallSilent
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;; InstallSilentExe wird Aufgerufen um das die gewünschte Datei zu installieren, wenn diese ;; sich via Parameter unattended installieren lässt. ;; ; Als Parameter muss zuerst der Dateiname und dann alle Aufrufparameter mitgegeben werden ;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
Func InstallSilentExe($name, $params) ConsoleWrite(GetTime() & ': InstallSilentEXE wurde aufgerufen für ' & $name & @CRLF)
;~ Die in das Tempverzeichnis gelegte Datei wird mit parametern aufgerufen ShellExecuteWait($name, $params, $tempDirName) ConsoleWrite(GetTime() & ': Setup wurde aufgerufen für ' & $name & @CRLF)
;~ Die Datei wird nachdem der Prozess beendet wurde gelöscht FileDelete($tempDirName & '\' & $name) ConsoleWrite(GetTime() & ': Datei wurde gelöscht ' & $name & @CRLF & @CRLF)EndFunc ;==>InstallSilentExe
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;; InstallSilentMSI wird Aufgerufen um das die gewünschte Datei zu installieren, wenn diese ;; sich via Parameter unattended installieren lässt. ;; ;; Als Parameter muss der Dateiname mitgegeben werden ;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
Func InstallSilentMSI($name) ConsoleWrite(GetTime() & ': InstallSilentMSI wurde aufgerufen für ' & $name & @CRLF)
;~ Die in das Tempverzeichnis gelegte Datei wird mit parametern aufgerufen ShellExecuteWait("msiexec.exe", '/i "' & @ScriptDir & '\' & $tempDirName & '\' & $name & '"' & ' /quiet') ConsoleWrite(GetTime() & ': Setup wurde aufgerufen für ' & $name & @CRLF)
;~ Die Datei wird nachdem der Prozess beendet wurde gelöscht FileDelete($tempDirName & '\' & $name) ConsoleWrite(GetTime() & ': Datei wurde gelöscht ' & $name & @CRLF & @CRLF)EndFunc ;==>InstallSilentMSI
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;; InstallSilentZipExe wenn beim Setup mehrere Dateien benötigt werden. Diese können dann als ;; zip Archiv mitgegeben werden. ;; ;; Da AutoIt keine ZIP unterstützung mitbringt muss 7zip installiert sein ;; ;; Als Parameter sollte muss zuerst der Archivname, dann der Name der auszuführenden Datei ;; und dann die Parameter mitgegeben werden ;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
Func InstallSilentZipExe($archivname, $name, $params) ConsoleWrite(GetTime() & ': InstallSilentZipExe wurde aufgerufen für ' & $name & @CRLF)
;~ Das mitgegebene Archiv wird entpackt ShellExecuteWait('unzip.exe', $archivname, '.\temp') ConsoleWrite(GetTime() & ': Archiv wurde entpackt ' & $archivname & @CRLF)
;~ Die in das Tempverzeichnis entpackte Setup-Datei wird mit parametern aufgerufen ShellExecuteWait($name, $params, $tempDirName) ConsoleWrite(GetTime() & ': Setup wurde aufgerufen für ' & $name & @CRLF) ConsoleRead()
;~ Es wird auf die Beendung des Prozesses gewartet ProcessWaitClose($name) ConsoleWrite(GetTime() & ': Prozess wurde abgeschlossen von ' & $name & @CRLF)
;~ Die Datei wird nachdem der Prozess beendet wurde gelöscht FileDelete($tempDirName & '\*.*') ConsoleWrite(GetTime() & ': Datei wurde gelöscht ' & $name & @CRLF & @CRLF)
EndFunc ;==>InstallSilentZipExe
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;; GetTime wird aufgerufen um die aktuelle Zeit inkl. Millisekunden zu erhalten ;; ;; Rückgabe im Format hh:mm:s,f ;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
Func GetTime() Return (@HOUR & ':' & @MIN & ':' & @SEC & "," & @MSEC)EndFunc ;==>GetTime
#endregion funcInstallSilent
#endregion funcs
#region Setups;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;; Firefox Aktuell in Version 26.0 ;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;FileInstall('Firefox.msi', $tempDirName & '\Firefox.msi')ProgressSet(18, 'Firefox wird installiert')
InstallSilentMSI('Firefox.msi')
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;; Thunderbird Aktuell in Version 24.2.0 ;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;FileInstall('Thunderbird-Setup-24.2.0.exe', $tempDirName & '\Thunderbird-Setup-24.2.0.exe')ProgressSet(36, 'Thunderbird wird installiert')InstallSilentExe('Thunderbird-Setup-24.2.0.exe', '-ms')
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;; Adobe Reader Aktuell in Version 11.0.0.6 ;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
FileInstall('AdbeRdr11006_de_DE.exe', $tempDirName & '\AdbeRdr11006_de_DE.exe')ProgressSet(54, 'Adobe Reader wird installiert')InstallSilentExe('AdbeRdr11006_de_DE.exe', '/sAll /rps')
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;; LibreOffice Aktuell in Version 4.1.4;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;FileInstall('LibreOffice_4.1.4_Win_x86.msi', $tempDirName & '\LibreOffice_4.1.4_Win_x86.msi')
ProgressSet(72, 'Libre Office wird installiert')InstallSilentMSI('LibreOffice_4.1.4_Win_x86.msi')
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;; VLC Aktuell in Version 11.0.0.6 ;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;FileInstall('vlc-2.1.2-win32.exe', $tempDirName & '\vlc-2.1.2-win32.exe')ProgressSet(90, 'VLC wird installiert')InstallSilentExe('vlc-2.1.2-win32.exe', '/L="1031" /S')
#endregion Setups
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;; zum schluss wird der Ordner "temp" gelöscht. ;; 1 = Alle Ordner und unterordner werden gelöscht ;; 0 = Wenn der ordner nicht leer ist bleibt er erhalten ;;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
ProgressSet(99, 'Temporäre Dateien werden gelöscht')DirRemove($tempDirName, 1)ProgressOff()if( MsgBox( 36, 'Setup Abgeschlossen' , 'Das Setup wurde erfolgreich abgeschlossen, es wird empfohlen den Computer neu zu starten.' & @CRLF & @CRLF & ' Jetzt neu starten?') = 6) Then Shutdown( 6 )
Das Problem:
Ich kann das Script ausführen, die Setups laufen dann auch alle durch. (wichtig : Adminrechte) Aber wenn ich es Compiliere, erhalte ich eine nur knapp 850kB große executable, welche natürlich nicht alle Setups beinhaltet und auch nicht ausführbar ist.
Ob das Script jetzt an jeder Stelle unbedingt nach best practice gelößt ist sei mal dahingestellt, es funktioniert auf jeden Fall Wer ne Idee warum der Compiler nicht will?