tengo un programa de actualización, los archivos extraídos del servidor han mezclado vb6 dll y .net dll en un directorio. cómo determinar si un dll es un COM? (así que puedo invocar regsvr32 desde el programa de actualización)Cómo determinar si DLL es COM o .NET?
Respuesta
Supongo que una forma de hacerlo sería intentar cargar el archivo con System.Reflection.Assembly.LoadFile(). Si obtiene una BadImageFormatException, no es un ensamblado .NET válido. Probablemente haya una manera más clara de hacer esto, pero esto debería funcionar.
Parece mucho trabajo escribir un instalador que haga esto en lugar de rastrear cuidadosamente qué DLL deben registrarse. Pero +1 de todos modos – Tim
¿Por qué no llaman regsvr en todos ellos. Si se registran, entonces está bien, si no fuera poco.
Probablemente sea mejor escribir un instalador que tenga el conocimiento de cuáles son los que y hace lo correcto para cada uno.
EDITAR
Si usted está preocupado por los "errores" que emiten, no se preocupe.
Puede suprimir los mensajes. (s)
[@Hao] (http://stackoverflow.com/users/55327/hao) - a pesar de mi respuesta alternativa, estoy de acuerdo con Tim. –
@AJ: el problema con regsvring ciegamente, si el DLL es del tipo .NET, el regsvr32 emite un error – Hao
http://support.microsoft.com/kb/249873 - use el indicador silencioso ... – Tim
Para hacer esto formalmente, puede inspeccionar el PE para obtener más información sobre qué tipo de cosas exporta cada dll. Hay a pretty interesting article on MSDN que habla sobre la estructura. Si comprende la configuración, puede identificar enlaces a .Net (y por lo tanto, la falta que indica un dll COM puro).
Me quedé sin votos hoy. Volveré y votaré esta. Es una buena respuesta técnica. – Tim
@ [Tim] (http://stackoverflow.com/users/26177/tim) - gracias :) Esto no es para corazones débiles, pero con un poco de esfuerzo podría proporcionar una solución bastante sólida.Si el escenario es algo más alto que el montaje, este enfoque debería ser confiable (léase: no hay demasiados PE "optimizados" para tratar). –
- 1. ¿Qué es "mejor": DLL COM o DLL estándar con Typelib?
- 2. .NET: ¿Cómo puedo determinar si un objeto es un objeto COM?
- 3. Cómo determinar si un archivo DLL requiere Full .NET 4 o solo Client Profile
- 4. Determinado mediante programación si está instalada una biblioteca COM (.DLL)
- 5. C# COM DLL: ¿uso Regasm o Regsvr32?
- 6. registrando com dll en wix
- 7. Determine si el puerto serie es COM o SPP normal
- 8. ¿Cómo encuentra un programa COM una DLL .NET registrada para COM Interop?
- 9. ¿Cómo determinar si un tipo .NET es una estructura personalizada?
- 10. ¿Es .NET "todo COM debajo"?
- 11. Tlbexp.exe en un DLL COM
- 12. El registro de un DLL COM NET durante Wix Instalar
- 13. ¿Cómo determinar si se construyó un ensamblado .NET para x86 o x64?
- 14. C# .NET - cómo determinar si el directorio es grabable, con o sin UAC?
- 15. ¿Cómo determinar si una clave es una letra o número?
- 16. ¿Cómo determinar si un idioma es recursivo o recursivo enumerable?
- 17. ¿Cómo determinar si una aplicación es nativa o html5?
- 18. Determinar si un ensamblaje es parte del .NET framework
- 19. Registro Com y dll manifiestos
- 20. ¿Cómo puedo detectar el tipo de un dll? (COM, .NET, WIN32)
- 21. ¿Herramienta para crear contenedores .NET para una DLL COM?
- 22. ¿Cómo pruebo un .dll .NET de .NET administrado existente para ver si es 32 bits o 64 bits?
- 23. cómo determinar si una imagen es explícita
- 24. Cómo determinar si KeyCode es carácter imprimible
- 25. COM Interop .NET STA
- 26. Haciendo que una DLL COM esté accesible
- 27. ¿Cómo determinar si una secuencia es bitónica?
- 28. ¿Puede NuGet distribuir un dll COM?
- 29. ¿Es posible construir una DLL .NET con tipos visibles COM sin VS que requiera elevación?
- 30. com + alternativa en .net?
¿Por qué no hacer lo correcto y registrar los que usted sabe que son servidores COM y omitir los que no lo son? Debería tener esa información y puede codificarla en su instalador. – Tim
@Tim - Supongo que podría haber una situación en la que los editores del código no sean la misma organización que los consumidores; de lo contrario, estoy de acuerdo: controlen el proceso de manera explícita. –
@AJ - eso todavía no significa que uno no pueda resolverlo y probarlo. Mi punto es que si es parte de su proceso de instalación, usted debe SABER lo que debe registrarse. No hacerlo es descuidado y poco profesional. Es una prueba simple hacerlo de antemano. ¿Por qué querría agregar código cuando todo lo que necesita hacer es determinar de antemano? – Tim