Archiv

Archiv für November, 2010

Windows 7, Delphi und das Datumsformat

18. November 2010 Keine Kommentare

Vor kurzem hatten wir auf einem neuen Windows 7 Rechner das Problem, dass die Regionaleinstellungen in der Anwendung nach EN-en aussahen, obwohl DE-de aktiviert war. Andere Windows 7 Rechner zeigten die Probleme nicht. Nach einiger Suche habe ich in einem Forum zwei mögliche Workaround ausmachen können:

1) Man schaltet die Ländereinstellungen auf irgendwas anderes, und dann wieder zurück auf die Wunschsprache.

2) Man fügt in sein Delphi Projekt folgende Unit ein und trägt sie in irgendeiner uses ein.

unit Win7;
 
interface
 
uses
 SysUtils, Windows;
 
implementation
 
initialization
 SetThreadLocale(LOCALE_USER_DEFAULT);
 GetFormatSettings;
end.

Speziell nach Sichtung dieser zwei Zeilen bleibt aber die Frage zurück, ob das ein Problem von Windows 7 oder ein Problem von alten Win32 Anwendungen ist, die sich vielleicht unbewußt nicht an die Vorgaben von Microsoft halten.

Robocopy und seine Rückgabewerte

3. November 2010 Keine Kommentare

Im Rahmen einer Datensicherung mit Acronis sollte das Sicherungsarchiv auf Wechselmedien gespiegelt werden. Dazu bietet sich das Kommandozeilentool Robocopy an, das seit Jahren zum Lieferumfang von Windows gehört und extrem mächtig ist. Grundsätzlich hat es funktioniert, aber der Abschlusstask mit Robocopy wurde von Acronis immer als fehlerhaft bewertet. Nach einer Weile war die Ursache klar: Kommandozeilenbefehle liefern als Rückgabewert üblicherweise

= 0: kein Fehler
> 0: Fehler

Robocopy belegt aber die Codes 0-7 mit Erfolgsmeldungen. Um diesem Verhalten gerecht zu werden, Acronis im Erfolgsfalle aber Null zurückzugeben, wurde eine kleine Batchdatei geschrieben, welche die ErrorLevel 0-7 in 0 umwandelt und in allen anderen Fällen die 8 zurückgibt (der reale Rückgabewert ist bei Fehlern egal, da Robocopy eine Logdatei schreiben kann).

robocopy "Quellpfad" "Zielpfad" "*.TIB" /PURGE
if NOT errorlevel 8 (EXIT /B 0)
EXIT /B 8

Interessant ist hier besonders die Abfrage

if NOT errorlevel 8

, welche quasi für

if errorlevel < 7

steht. Wer nicht so oft Batch-Dateien schreibt, wird von diesem Verhalten oft überrascht.

KategorienAllgemein Tags: , ,