Wątek MS Office z jednego pliku DLL?

1

Pracuję dla biura obsługi, używamy MS Office w systemie Windows 7. Zauważyłem, że gdy jeden program biurowy ulega awarii, a jeśli inny jest uruchomiony, zamknięcie drugiego działającego programu biurowego pozwoli na ponowne uruchomienie tego, który uległ awarii, jeśli nie zamykaj go, wydaje się, że to nie działa.

Na przykład:

Załóżmy, że aplikacja Outlook ulega awarii i masz uruchomiony Skype. Jeśli spróbujesz ponownie uruchomić program Outlook przez większość czasu, pojawi się błąd mówiąc coś podobnego do Cannot open Outlook. Jeśli jednak zamkniesz Skype i uruchomisz ponownie program Outlook, program Outlook uruchomi się pomyślnie, a Skype również będzie działał pomyślnie.

Moje pytanie brzmi: czy to się dzieje, ponieważ MS Office wątkuje ten sam plik DLL? Na przykład jeden wątek uruchamia jedną aplikację, a drugi wątek uruchamia inną, co miałoby sens, ponieważ z tego, co rozumiem, jeśli wątek ulega awarii, a inny wątek działa, nie uruchomi drugiego wątku, dopóki drugi wątek się nie zakończy.

Pyth0nicPenguin
źródło

Odpowiedzi:

0

dzieje się tak, ponieważ MS Office wątkuje poza tym samym plikiem DLL?

Tak masz rację! Biuro „udostępnia” niektóre biblioteki DLL innym programom lub (lepiej powiedzieć) inne aplikacje używają kilku bibliotek DLL pakietu Office. DLL jest rodzajem „serwera”, który oferuje swoje funkcje wielu „klientom”.

koleś
źródło
Czy byłby więc sposób na ponowne otwarcie aplikacji bez konieczności ponownego uruchamiania wątków?
Pyth0nicPenguin
To zależy. Jeśli dozwolona jest tylko jedna instancja, nie będziesz w stanie: System utrzymuje liczbę referencji na proces dla wszystkich załadowanych modułów. Wywołanie LoadLibrary zwiększa liczbę referencji. Wywołanie funkcji FreeLibrary lub FreeLibraryAndExitThread zmniejsza liczbę referencji. System zwalnia moduł, gdy jego liczba referencyjna osiągnie zero lub gdy proces się zakończy (niezależnie od liczby referencyjnej).
duDE,