J'utilise un projet d'installation et de déploiement de VS 2008 pour déployer une application mixte gérée/non gérée. J'ai rencontré des problèmes lors de l'enregistrement des DLL en mode mixte à l'aide de la propriété d'inscription intégrée (valeur énumérée "vsdraCOM" de la propriété "Register"). Pour contourner le problème, j'ai ajouté un assembly d'installation .NET personnalisé (avec une classe dérive de System.Configuration.Install.Installer.) Je suis certain que cette classe est en cours d'exécution et qu'un certain nombre d'opérations réussissent à installer et désinstaller via le code dans cet assembly, y compris l'exécution du point d'entrée Dll (Un) RegisterServer d'un certain nombre d'assemblys .Force l'installation du GAC avant d'exécuter l'action personnalisée .NET?
Toutefois, une DLL ne réussit pas à s'enregistrer. C'est la seule DLL qui dépend de certains assemblys redistribuables tiers qui veulent être installés sur le GAC. Ces assemblages sont installés sur le GAC grâce à la prise en charge intégrée des projets d'installation et de déploiement de VS 2008, et je sais que cela fonctionne. J'ai confirmé que ce qui se passe est que l'action personnalisée est en cours d'exécution avant que le programme d'installation exécute l'installation GAC.
Ouf. Donc ma question est, y at-il un moyen de forcer le programme d'installation à exécuter l'installation du GAC avant d'exécuter l'action personnalisée? Est-il possible d'utiliser la propriété "Condition" de l'action personnalisée pour le faire? Sinon, quelle est ma meilleure alternative? Capture les entrées de registre à partir de la DLL et les ajoute aux paramètres de registre pour le programme d'installation (n'aime pas cela parce que quelqu'un peut ajouter de nouveaux serveurs COM à la classe à l'avenir)? Utilisation du code .NET pour installer manuellement l'assembly dans le GAC (ne savez pas encore comment le faire)?
Merci,
Dave
Merci, nous utilisons installshield mais il faudra plusieurs semaines avant que l'ordinateur de build ne fonctionne à nouveau et j'ai besoin d'une installation fiable dès que possible. La solution API MSI semble prometteuse. FYI, j'ai trouvé que System.EnterpriseServices.Internal.Publish.GACInstall() va installer un assembly arbitraire dans le GAC, mais ce n'est pas idéal pour un certain nombre de raisons ("interne", peu de vérification d'erreur, pas idéal pour la restauration/désinstallez la sémantique.) –