Quantcast
Channel: Andy – Andy's Blog
Viewing all articles
Browse latest Browse all 2170

MailStore Home: Versteckt ausführen und Archivieren mit Rückgabewert

$
0
0

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.

HMSHwE.zip

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

Viewing all articles
Browse latest Browse all 2170