Zum Thema Automatisieren von MailStore Home gab es bereits Beiträge:
MailStore Home: Automatisch archivieren und bei Erfolg beenden
MailStore Home von 4.2 auf 5.0 updaten + Automatisierung der Archivierung
Auf Basis des letzten Beitrags folgt nun eine etwas aufgebohrtere Variante.
Gleich Vorweg, es gibt zwei Möglichkeiten, MailStore Home versteckt auszuführen. Die erste bietet die Möglichkeit einer Auswertung, hat aber den Nachteil, das, wenn auch nur kurz, das eine oder andere Fenster erscheint.
Teilweise verteckt ausführen mit Auswertung
In der vorigen Variante war es so, das bei Erfolg MailStore Home geschlossen wurde. Das Ganze wurde recht simple umgesetzt, in dem in der Fortschrittsanzeige nach dem entsprechenden Abschlusssatz gesucht wurde.
Die Prüfung auf den Abschluss der Archivierung erfolgt nun auf Basis des vorhandenseins der Schaltfläche „Details…“. Diese erscheint in der Fortschrittsanzeige erst, wenn die Aufgabe abgeschlossen wurde. Als nächstes wertet man aus, ob die Archivierung erfolgreich war oder eben nicht.
Diese erweiterte Version ermöglicht über die Auswertung des Rückgabewertes im Anschluss an die Ausführung der Archivierung dann z.B. eine Alarmeriung per Mail o.ä.
Das AutoIt-Skript inkl. Kommentare sieht dann so aus:
; AutoIt TrayIcon ausblenden #NoTrayIcon ; Parameter übergeben $MailStoreCMD = $CmdLine[1] ; MailStore Home ausführen Run($MailStoreCMD, "", @SW_HIDE) ; Das Auslesen von verstecktem text aktivieren Opt ("WinDetectHiddenText", 1) ; Die Fortschrittsanzeige ausblenden While 1 ; If WinExists ("MailStore Home") Then ; WinSetState ("MailStore Home", "", @SW_HIDE) <- verhindert den erfolgreichen Start des Programms ; WinSetState ("MailStore Home", "", @SW_MINIMIZE) <- Dann erscheint wieder das Hauptfenster ; EndIf If WinExists ("Fortschrittsanzeige") Then WinSetState ("Fortschrittsanzeige", "", @SW_HIDE) ExitLoop EndIf WEnd ; Auf den Abschluss der Archivierung warten und den Rückgabewert ermitteln ; 0 = Alles OK ; 1 = Fehler/Warnung While 1 If WinExists ("Fortschrittsanzeige", "Details...") Then If WinExists ("Fortschrittsanzeige", "Der Vorgang wurde erfolgreich abgeschlossen.") Then $ExitCode = 0 Else $ExitCode = 1 EndIf ; If WinExists ("Fortschrittsanzeige", "Der Vorgang wurde abgeschlossen mit Fehlern.") Then $ExitCode=1 ProcessClose ("MailStoreHome.exe") Exit ($ExitCode) EndIf Sleep (500) WEnd
Aufgerufen als kompilierte Exe-Datei wird es dann zusammen mit MailStoreHome:
start /wait "" HMSHwE_x64.exe "MailStoreHomePortable\Application\MailStoreHome.exe /c archive --id=1"
Der Rückgabewert kann wie gewohnt per Errorlevel abgefragt werden. 0 bedeuet Erfolgreich, größer als 0 Warnung/Fehler.
start /wait "" HMSHwE_x64.exe "MailStoreHomePortable\Application\MailStoreHome.exe /c archive --id=1" if %errorlevel% gtr 0 smtpsend.exe...
Download
Das Archiv enthält den Quellcode und jeweils eine Exe-Datei für 32- und 64-bit.
Nebenbei bemerkt: HMSHwE bedeutet „Hide MailStore Home with Errorlevel“
Vollständig versteckt ausführen ohne Auswertung
Um MailStore Home vollständig versteckt auszuführen kann man auf die „RunCompletelyHidden.exe“ aus dem Beitrag AutoIt: Alle Fenster eines Prozesses ausblenden zurückgreifen:
RunCompletelyHidden.exe C:\Skripte\MailStoreHome.cmd
MailStoreHome.cmd: start "" C:\MailStoreHomePortable\Application\MailStoreHome.exe /c archive --id=1
Diese Methode hat allerdings den Nachteil, das man (bislang) nicht den Status bzw. Text der „Fortschrittsanzeige“ abrufen kann. Folglich weiß man nicht, ob der Job mit welchem Ergebnis abgeschlossen wurde.
Um MailStore Home dann dennoch zu beenden könnte man nach einer Pause den Prozess beenden. Folgende Zeilen zur „MailStoreHome.cmd“ hinzufügen:
timeout /t 360 taskkill /im mailstorehome.exe /f