in Anbetracht der Tatsache, dass immer wieder Betreiber von Wswin in Verbindung mit einer Vantage Pro2 auf Schnittstellenfehler laufen und Wswin dann hängen bleibt, veröffentliche ich hier mal meinen kleinen Workaround.
In unregelmäßigen Abständen bin ich auch davon betroffen, bei mir ist es aber in Verbindung mit der 04:00 Uhr-Geschichte.
Als erstes müsst ihr in Wswin unter
Datei - Optionen - das Kästchen "Fehler (Kommunikation, Fehlerkorrektur) protokollieren <b>anhaken</b>
Im Anschluss sollte dann im Wswin-Verzeichnis, im Fehlerfall, die Datei 'WSWINERR.TXT' auflaufen.
Bei einem Schnittstellenfehler, mit anschließenden hängenbleiben, sieht der Eintrag wie folgt dann aus: "..... Vantage Pro2 nicht gefunden 10".
Und eben diesen Eintrag werte ich mit einem Powershell-Script unter Windows 10 dann aus.
Script-Name: 'kill-wswin.ps1'
Code: Alles auswählen
# setzen der Variablen
$ProgName = "Wswin32"
$ProgNameStart = "C:\[Pfad zu Ordner]\Wswin32.exe"
$LogPath = "C:\[Pfad zu Ordner]\"
$LogWswin = "WSWINERR.TXT"
$SearchString = "Vantage Pro2 nicht gefunden 10"
$LogRest = "restart.log"
$RestText = "Restart von WsWin nach vorherigen Fehler"
$LineNumber = 0
$RealRest = 0
# durchsuchen des Log-Files nach dem Suchstring
If (Test-Path ($LogPath + $LogWswin)){
$StreamReader = New-Object System.IO.StreamReader(($LogPath + $LogWswin))
While ($StreamReader.Endofstream -eq $False){
$Line=$StreamReader.ReadLine()
If($Line -match $SearchString){
$Line | Out-File -FilePath ($LogPath + $LogRest) -encoding Default -Append
$RealRest +=1
}
}
$StreamReader.Close()
}
# Aktion nach gefundenen Suchstring
If($RealRest -gt 0){
Stop-Process -Name $ProgName -Force
Start-Sleep -s 15
$DateTime = Get-Date -UFormat "%d.%m.%Y %H:%M:%S"
"{0} {1}" -f $DateTime, $RestText + "`r`n" | Out-File -FilePath ($LogPath + $LogRest) -encoding Default -Append
Start-Process -FilePath $ProgNameStart
Copy-Item -Path ($LogPath + $LogWswin) -Destination ($LogPath + $LogWswin + ".bak") -Force
Remove-Item ($LogPath + $LogWswin) -Force
}
Ablauf des Scriptes:
Das Logfile wird nach dem 'SearchString' durchsucht. Beim Auftreten eines entsprechenden Eintrags wird die betreffende Zeile in die 'restart.log' übernommen und der Restart-Zähler 'RealRest' auf einen Wert größer Null gesetzt.
Im Zweiten Teil dann, wenn der Restart-Zähler eben größer Null ist, wird der Prozess von Wswin gekillt. Dieser Zeitpunkt wird in die 'restart.log' übernommen und Wswin wird neu gestartet.
Zu guter Letzt wird die 'WSWINERR.TXT' in ''WSWINERR.TXT.bak' kopiert und die eigentliche 'WSWINERR.TXT' gelöscht.
Damit nun das Ganze auch automatisch und alleine funktioniert, lasse ich über die Aufgabenplanung in regelmäßigen Abständen das beschriebene Script laufen.
Das Script kann dabei mit den Rechten des angemeldeten Users betrieben werden. Wichtig bei der Aufgabendefinition sind lediglich im Registerreiter Aktion die folgenden Einträge.
Bei 'Programm/Script' lautet der Eintrag: '%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe'.
Bei 'Argumente hinzufügen (optional): '-noninteractive -command "C:\[Pfad zu Ordner]\kill-wswin.ps1'.
Bei Starten in (optional): 'C:\[Pfad zu Ordner]\Wswin'.
Seit dem ich diesen kleinen Woraround betreibe, habe ich keine Schwierigkeiten mehr und meine Wetterseite ist immer aktuell!
Auf einen durchlaufenden Betrieb .....
Gruß
Rainer