2010-10-20 13 views
5

Utworzyłem pakiet projektowy z rejestracją komponentów (sam komponent jest w czasie wykonywania) i niektórymi elementami menu IDE.Jakieś pomysły na Delphi XE mogą losowo nie ładować pakietu projektowego?

Po kliknięciu pozycji menu "Instaluj" w menu kontekstowym Menedżera projektu - pakiet zostanie załadowany i działa normalnie (zawsze).

Jeśli zamknę IDE i uruchomić go ponownie - pakiet mogą być ładowane lub nie może być załadowany. Wydaje się przypadkowo. Ale zwykle nie ładuje się, niż ładuje.

Jeśli przejdę do pakietów Component/Install - widzę mój pakiet na liście, pole wyboru jest zaznaczone, przycisk "Components" pokazuje komponenty w moim pakiecie, ale plik wykonywalny pakietu nie jest nawet załadowany do IDE! (Sprawdziłem to za pomocą Eksploratora procesów). Ponowna instalacja (remove package -> Ok -> Component/Install packages -> Add -> Ok) nie pomaga. Ale odinstalowanie/instalacja z menu kontekstowego projektu w Menedżerze projektów - zawsze pomaga.

Dodałem OutputDebugString do sekcji inicjalizacji każdego mojego modułu w pakiecie. Odkryłem, że sekcje inicjalizacyjne po prostu nie działają.

Pakiet czasu bieżącego znajduje się w tym samym folderze co pakiet czasu projektowania. Folder znajduje się w zmiennej środowiskowej PATH. Próbowałem również umieszczać paczki w folderze Bin Delphi. Brak komunikatów o błędach. Brak dziwnych/diagnostycznych OutputDebugStrings.

Wszelkie pomysły?

P.S. Mam takie zachowanie na dwóch różnych komputerach. Jednym z nich jest Win7, innym jest WinXP SP 2.

P.P.S. Nie mogłem odtworzyć tego zachowania na Delphi 7. Ten sam pakiet, rekompilowany zawsze dla ładunków D7.

Odpowiedz

8

Odkryłem, że nowe Delphi mają funkcję opóźnionego ładowania pakietów. To powinno zoptymalizować prędkość uruchamiania, gdy pakiety nie są ładowane, gdy nie są potrzebne.

Działa to dobrze dla pakietów komponentów, ale psuje zabawę dla pakietów, które (na przykład) modyfikują menu IDE.

Możesz poinformować IDE, aby zawsze ładował paczkę, dzwoniąc pod numer ForceDemandLoadState (dlDisable) z Zarejestruj procedurę.

P.S. Dlaczego zawsze znajdujesz odpowiedź prawie natychmiast po opublikowaniu pytania? : D

+2

Ponieważ podczas przesłuchania musisz ponownie przemyśleć problem, aby przekazać go innym ludziom - na końcu widzisz problem z inną perspektywą. Czasami to wystarczy. –

Powiązane problemy