Problem z migracją sygnaturek Outlook Express


2009-11-28

Ostatnio próbowałem przenieść wiadomości i ustawienia Outlook Express z jednego komputera na drugi. Na pierwszy rzut oka wszystko się przeniosło ale okazało się, że nie można tworzyć żadnych wiadomości. Przy próbie stworzenia nowego e-maila lub posta albo odpowiedzi pojawiało się okienko edycji by zaraz potem OE wykonał nieprawidłową operację. Przez długi czas nie mogłem znaleźć przyczyny. Niby wszystko zrobiłem dobrze a jednak OE się wieszał.
W końcu na grupie dyskusyjnej naprowadzono mnie na przyczynę: sygnaturki. Outlook Express trzyma sygnaturki w rejestrze w wartości typu REG_SZ, czyli zwykłej wartości tekstowej (ciąg). Problem pojawia się, gdy sygnaturka ma kilka linijek. Wówczas przy eksporcie klucza za pomocą Edytora rejestru zapisuje on wartość w pliku .reg w kilku linijkach. Potem Edytor rejestru na drugim komputerze nie potrafi tego poprawnie wczytać. W rejestrze komputera docelowego nie jest więc tworzona wartość przechowująca treść sygnaturki. Przy próbie napisania wiadomości OE nie znajdując tej wartości wywala się. Mamy więc do czynienia z błędem w Outlook Express. Nie sprawdza on czy wartość z rejestru udało mu się poprawnie wczytać i próbuje się potem odwołać do zmiennej do której miała ta wartość być wczytana. Trafia jednak na pusty wskaźnik i występuje błąd dostępu do pamięci. Widać to po kodzie błędu 0xc0000005 (access violation), który można zobaczyć w okienku ze szczegółowymi informacjami o błędzie.
Co więc trzeba zrobić? Po imporcie trzeba wykasować z rejestru klucz HKEY_CURRENT_USER\Identities\{kod_tożsamości}\Software\Microsoft\Outlook Express\5.0\Signatures a następnie odtworzyć sygnaturki wyklikując ręcznie.
Zastanawiam się jeszcze nad kwestią eksportu - czy błąd jest w Edytorze rejestru czy w Outlook Express. Chodzi o to, czy wartości REG_SZ służą do przechowywania tekstów wielolinijkowych, zawierajacych przejścia do nowej linii. Jeśli tak, to wina jest po stronie Edytora rejestru, który nie potrafi ich poprawnie eksportować i importować. A jeśli nie, to znaczy, że OE źle wykorzystuje rejestr i to z jego winy nie można eksportować/importować sygnaturek. Być może powinien on zapisywać sygnaturki w wartości binarnej (REG_BINARY) lub wielociągu (REG_MULTI_SZ).

Copyright(C) Grzegorz Niemirowski 2006-2012