Lista winnt@man.lodz.pl
[Lista archiwów] [Inne Listy]

Re: [WINNT] W Win XP Pro SP3 nie działa Wyszukaj

To: winnt@man.lodz.pl
Subject: Re: [WINNT] W Win XP Pro SP3 nie działa Wyszukaj
From: Robert Winkler <noone@nowhere.org>
Date: Fri, 19 Feb 2016 08:17:30 +0100
Wpisałem pojedynczo, a potem zrestartowałem system.
Nie pomogło. Nie wiem jednak co to jest "rejestracja
bibliotek". Może dlatego nie pomogło.

Chciałbym odpowiedzieć, co to jest rejestracji bibliotek w Windows.
Wiele plików w systemie Windows to tak zwane biblioteki COM-owe.
biblioteki takie przed użyciem muszą zostać zarejestrowane
oznacz to, że w Registry muszą zostać zapisane informacje
o tym tym że taka biblioteka się znajduje,
czy jest to dysko lokalne, a jeśli tak
to gdzie dokładnie na nim jest ona umieszczona,
a jeśli biblioteka znajduje się na innej maszynie
to jak za pomocą Remote Procedure Call skontaktować się tym serwerem.
Inne informacje to jakie typy danych,
klasy i interfejsy są w niej zdefiniowane,
gdzie znajduje się pliki opisujący te struktury
oraz wszystkie publiczne metody zdefiniowane
w klasach i interfejsach ten biblioteki.
Cześć zapisana jest w HKEY_CLASSES_ROOT\Interface
cześć w HKEY_CLASSES_ROOT\CLSID
inne informacje znowuż w HKEY_CLASSES_ROOT\TypeLib
wiele z kluczy znajdujących się bezpośrednio w HKEY_CLASSES_ROOT
z zawierające tylko klucz CLSID
to nazwy klas lub interfejsów.

Korzystając z regsvr32 zapisujesz do rejestru właśnie te informacje.
Bardzo ważne jest gdzie na dysku znajduje się rejestrowany plik,
oraz żeby po rejestracji nikt go z tego miejsca już nigdy nie usunął.
Dlaczego, ponieważ ta informacje zapisywana jest w rejestrze.
Przykładowo, jedna z klas używanych przy pobieraniu danych z baz
klasa ADODB.Record ma w swoim opisie w kluczu
HKEY_CLASSES_ROOT\CLSID\{00000560-0000-0010-8000-00AA006D2EA4}\InprocServer32
domyślną wartość: C:\Program Files\Common Files\System\ado\msado15.dll
Jeśli ktoś usunął by ten plik z dysku, to wszystkie programy
korzystające z klasy ADODB.Record przestały by działać.

Cześć tak zwanych programów Portable robi niestety coś takiego.
Jeśli korzystają z bibliotek COM-owych
to przy starcie wypakowują je do katalogu TEMP
i rejestrują je w tym folderze.
System co pewien czas czyści TEMPa,
więc usuwa też te zarejestrowane biblioteki,
co może się skończyć przykładowo
utratą funkcji wyszukiwania plików w Eksploratorze.

Czasem można to naprawić, próbując zarejestrować ponownie
wszystkie pliki DLL i OCX w C:\Windows\System32.
Ale jak widać w moim przykładzie,
cześć z nich może znajdować się standardowo w zupełnie innym miejscu.
Rejestracje można spróbować zautomatyzować
na przykład za pomocą takiego batcha uruchomionego w System32
(pisałem go z głowy, wiec nie wiem czy zadziała)

for %%a in (*.dll) do regsvr32 /s /c %%a
for %%a in (*.ocx) do regsvr32 /s /c %%a

--
Robert

<Pop. w Wątku] Aktualny Wątek [Nast. w Wątku>