2010-03-26 10 views
8

Muszę zarejestrować wiele złożeń w GAC przy użyciu InstallSheild, a także potrzebuję również złożyć zespoły do ​​skopiowania na INSTALLDIR. Jaki jest najlepszy sposób na zrobienie tego? Również muszę wywołać regasm.exe dla zespołu; czy mogę to zrobić za pomocą InstallShield?Rejestracja złożeń na GAC ​​przy użyciu InstallShield

Naprawdę potrzebuję nowego "komponentu" dla każdego zestawu, który musi być zarejestrowany w GAC?

Odpowiedz

10

Ta odpowiedź zakłada, że ​​używasz projektu typu Instalator Windows.

1) Utwórz komponent dla każdego pliku DLL, ustaw go jako plik klucza i ustaw docelowy folder na GlobalAssemblyCache. To instruuje Instalatora Windows, aby używał standardowej akcji MsiPublishAssemblies, która z kolei wywołuje połączenia do Fusion w celu zarejestrowania zespołu w GAC. Tak właśnie działa GACUTIL dla Ciebie. Pamiętaj: GACUTIL nie podlega redystrybucji. Jeśli zespół zawiera pliki towarzyszące, dodaj je jako pliki towarzyszące do tego samego komponentu.

2) Jeśli twój zestaw jest ComVisible, utwórz komponent dla każdej biblioteki DLL, oznacz go jako plik klucza i ustaw parametr .NET ComInterop na wartość true. Spowoduje to wyodrębnienie informacji z COM w czasie kompilacji i nakazanie Instalatorowi systemu Windows użycia standardowej akcji MsiPublishAssemblies w celu zapisania informacji w rejestrze. Uwaga: Jeśli masz niestandardowy kod użytkownika w sekcji rejestracji zespołu, nie zostanie on przechwycony. Jest to na MSDN, że regasm /regfile nie wykonuje tej ścieżki kodowej. Będziesz musiał ręcznie wprowadzić te informacje do widoku rejestru InstallShield dla tego komponentu.

3) Tak, możesz wdrożyć silnie nazwany zespół zarówno globalnie, jak i/lub prywatnie. To, czy prywatny będzie widoczny, zależy od tego, czy zestaw z referencją ma zestaw UseSpecific, czy nie.

+0

Przyjemny, żeby pobudzić moją pamięć Chris! –

0

Tak. Jeśli chodzi o system, są to dwa różne pliki. AFAIK, nie możesz mieć pliku w GAC i mieć go w losowym folderze na komputerze docelowym w tym samym czasie.

Teoretycznie, jeśli jest w GAC, nie jest potrzebny w katalogu produktów. Jeśli jest w GAC, będzie to załadowana wersja, a nie wersja w katalogu produktów. Jednak staje się trudniejsze, jeśli musisz, powiedzmy, zarejestrować go również dla współdziałania z COM. Mogę się mylić, ale kiedy próbowałem, musiałem mieć oba: jeden w katalogu, jeden w GAC.

Ale tak naprawdę, prawdopodobnie nie potrzebujesz go w GAC, jeśli potrzebujesz go w katalogu produktów. Jeśli jest ładowany z dowolnego programu w dowolnym miejscu, zawsze, to GAC to przyzwoite miejsce. Jeśli wstawiasz go w interakcję GAC For COM, nie jest to konieczne; zarejestrowanie go przez wskazanie folderu, który zainstalowałeś, będzie działało poprawnie, jeśli masz poprawnie skonfigurowany installshield.

+0

Opracowałem pasek narzędzi systemu Windows w języku C#. W tym przypadku biblioteki DLL powinny być w GAC, prawda? – Cornel

+0

Niekoniecznie. Jeśli konsumenci paska narzędzi używają go w swojej aplikacji, potrzebują go tylko w folderze aplikacji. –

Powiązane problemy