2010-03-31 11 views
8

W tym poprzednim pytaniu < How to get COM Server for Excel written in VB.NET installed and registered in Automation Servers list?> istnieje przykład tworzenia pełnej ścieżki do klucza rejestru przy użyciu VS 2008. Wszystko w poprzedniej odpowiedzi działa poprawnie, z wyjątkiem pełnej ścieżki, którą ustawiam (przy użyciu edytora rejestru w VS) dla mscoree.dll nie działa (co oznacza, że ​​wydaje się nic nie robić).Problem z zarejestrowaniem serwera COM napisanego dla programu Excel zarejestrowanego na komputerze klienta (nie można ustawić pełnej ścieżki do mscoree.dll)

Pełna ścieżka rejestru:

HKEY_CLASSES_ROOT \ identyfikator klasy \ {my_GUID} \ InprocServer32 \ (domyślnie)

a wartość ja ustawienie jest:

[SystemFolder] mscoree.dll

Mogę umieścić wszystko (w tym hardcoding pełną ścieżkę), ale ustawienie nie wydaje się ważne i rejestru zawsze zawiera mscoree.dll bez żadnej ścieżki.

Próbowałem dodać inną wartość do ścieżki rejestru przez VS i to działa poprawnie, w tym pełną ścieżkę określoną przez [SystemFolder].

Powodem, dla którego potrzebuję pełnej ścieżki (jak wyjaśniono w poprzednim pytaniu) jest to, że bez ścieżki program Excel generuje błąd po wybraniu serwera automatyzacji, ponieważ nie może znaleźć pliku mscoree.dll (co ciekawe, mimo że pojawia się błąd rejestracja działa OK).

Wykonuję instalację za pomocą projektu instalacji, który w przeciwnym razie działa poprawnie.

Instaluję na systemie VISTA * 64, ale otrzymałem taki sam błąd w innych systemach operacyjnych.

Czy ktoś wie, co robię źle?

Odpowiedz

1

Nie próbowałem tego, ale domyślam się, że jest to związane z tym, kiedy VS.NET umieszcza twój klucz rejestru "[SystemFolder] mscoree.dll". To działało w oryginalnym poście. Być może dlatego, że VS.NET uruchomił najpierw "regasm/regfile", a następnie zastąpił ten klucz "[SystemFolder] mscoree.dll"

W twoim przypadku to nie działa, ponieważ VS.NET wprowadza twoje klucz rejestru "[SystemFolder] mscoree.dll" najpierw do tabeli rejestru MSI, a następnie wartość została nadpisana przez wartości wyjściowe z "regasm/regfile".

Aby wykluczyć możliwość nadpisania wartości przez VS.NET, myślę, że możesz oznaczyć swój DLL vsdrpDoNotRegister. Następnie VS.NET nie zrobi żadnej magii na twojej tablicy rejestru. Teraz wszyscy jesteście sami, aby dokonać poprawnej rejestracji dodatku. Jednak, jak powiedział oryginał, wszystkie VS.NET robił po prostu "regasm/regfile". Dlaczego nie zrobisz tego sam. Po uzyskaniu pliku .reg z "regasm/regfile your.dll", jedyną rzeczą, którą musisz zrobić, to zaimportować go do tabeli rejestru. Kliknij prawym przyciskiem myszy "Rejestr na komputerze docelowym" i kliknij menu "Importuj ...". to jest to! To nie jest takie trudne. Po zaimportowaniu pliku rejestru powinieneś zobaczyć następujący klucz:

HKEY_CLASSES_ROOT\CLSID\{my_GUID}\InprocServer32\(default) 
Wartość powinna nadal być ustawiona na mscoree.dll. Teraz możesz po prostu zmienić go na [SystemFolder] mscoree.dll.

Powiązane problemy