2010-05-05 8 views
5

Tło:Odzyskaj COM ProgID z exe bez rejestracji to

chciałbym wyodrębnić dane COM z aplikacji VB6 więc mogę zarejestrować go prawidłowo (zgodnie z najlepszymi praktykami Microsoft) aplikacji. Używam WiX 3.0, a heat.exe nie wyodrębni danych (znany problem z ciepłem) i nie mam gotowego dostępu do powiązanego pliku TLB. Aplikacja VB6 nie ma włączonej kompatybilności, więc ponownie generuje identyfikatory COM dla każdej kompilacji (chcą, aby aplikacja działała równolegle ze starszą wersją).

Stworzyłem aplikację C#, która zbierze Informacje TypeLib, interfejs i CoClass z aplikacji VB6 bez rejestrowania go i tworzenia pliku wxs dla użycia świecy. Moja firma ma kilka innych starszych aplikacji takich jak ta i chciałbym, aby było to bardziej ogólne rozwiązanie.

Zagadnienia:

1.Czy istnieje sposób, aby zebrać „true” ProgID (programista ma jeden) z aplikacji z poza projektu lub pliku TLB i bez rejestracji go?

2. Czy istnieje sposób na sprawdzenie zamierzonego modelu gwintowania z biblioteki DLL bez rejestracji? (Mam zamiar obsłużyć wszystkie aktywne elementy COM, równie dobrze może być kompletny) Dziękuję.

+0

Przeglądarka obiektów OLE-COM, która jest dołączona do programu Visual Studio, może to zrobić, więc jest to zdecydowanie możliwe. Fajne pytanie! + 1 – ParmesanCodice

+1

Zazwyczaj odbywa się to poprzez skonfigurowanie przekierowania rejestru i wywołanie samo rejestracji. Składnik COM nie zostanie zarejestrowany i nie wiem, czy spełnia on część "pytania bez rejestracji". Używam ulepszonej wersji łoju: http://www.unicontsoft.com/upload/tallow/ – wqw

+0

Moim zamiarem było sprawdzenie, czy nie było bez wykonywania połączeń z rejestrem. Przeczytam o przekierowaniu Dziękuję. – mangelo

Odpowiedz

1

Tak i nie.

O ile mi wiadomo, nie ma ogólnego sposobu na uzyskanie ProgIDów z serwera typelib lub COM.

Punktem wejścia dla bibliotek DLL jest DllRegisterServer, który ma zapisywać informacje rejestracyjne w rejestrze, a dla serwerów EXE zazwyczaj mają one argument wiersza polecenia, który ma takie samo znaczenie.

Biblioteki typów zdają się zawierać opis wszystkich interfejsów i coclasses w komponencie, ale rzadko zawierają czytelny dla człowieka ProgID.

Jedyny czytelny sposób, jaki mogę zobaczyć i polecić, to zastąpić klucz HKCR \ CLSID, aby chwilowo wskazać gdzieś, a następnie zadzwonić pod numer DllRegisterServer. Ponieważ nadpisania kluczy rejestru są lokalne dla procesów, będzie to działać tylko dla serwerów działających w trybie (DLL).

Aby uzyskać informacje o zastępowaniu kluczy rejestru, zobacz stronę http://msdn.microsoft.com/en-us/library/ms724901(v=VS.85).aspx.

Następnie sprawdź rejestr zdrapki i zobacz, jakie zmiany zostały wprowadzone, np. CLSID < -> Mapowanie ProgID, model gwintowania itp.

+0

Spojrzę w to. Ponieważ koncentruję się teraz na innym projekcie, może to być kilka dni w tygodniu. – mangelo

+0

Zastanawiam się, czy być może doprowadziłem cię na manowce ... Przyglądając się bliżej 'RegOverridePredefKey', tylko nadpisuje w bieżącym procesie (z oczywistych powodów), więc nie można go użyć do zbierania danych rejestracyjnych z pliku wykonywalnego. Edytuję odpowiedź, aby to odzwierciedlić. –

Powiązane problemy