2008-10-24 7 views
28

¿Es posible usar un ocx (control ActiveX) en un winform (probablemente agregándolo programáticamente) sin tener primero el ocx registrado con regsrv32?Usa OCX sin registrarlo

Lo que estoy tratando de lograr es habilitar la instalación de xcopy. He tenido el archivo "AxInterop. .dll" y "Interop. .dll" generado desde mi máquina de desarrollo.

He visto la posibilidad de llamar a un dll COM sin registrarlo primero (ProSysLib, según el autor, pero aún no lo he probado), ya que ocx también está basado en COM, así que supongo que debe ser de alguna manera para hacer eso también.

Respuesta

31

Sí, esto se puede hacer. Debe asumir que su aplicación solo se implementará en Windows XP (o Windows Server 2003) o posterior, y luego puede usar lo que se denomina 'COM libre de registro' para que esto suceda.

Esencialmente lo que hace es crear un archivo de manifiesto para la DLL de control ActiveX para que el cargador de Windows & COM DLL sepa cuál es su registro sin tener que poner eso en el registro.

Un tutorial de lo que debe hacer es en este artículo en MSDN: Registration-Free Activation of COM Components: A Walkthrough

"Paso 6" y "Paso 7" en ese artículo contiene todo lo va a necesitar.

Acabo de probar esto en uno de mis propios programas C# que usa un control de red Microsoft ActiveX (el antiguo "MS Flex Grid") y funciona muy bien. Asegúrese de crear un archivo de manifiesto para su aplicación y la DLL COM, y sustituya los GUID apropiados en los lugares correctos. Es posible que necesite usar OLEVIEW para extraer los ID correctos para usar de la DLL de ActiveX si no los tiene a mano.

+0

ah, finalmente, bueno, es difícil buscar una solución como esta. Muchas gracias – faulty

+0

+1 .. lo mismo con @faulty Me acaban de asignar una aplicación en un componente COM ... – chakrit

+1

Tenga en cuenta que puede causar bloqueos aleatoriamente en Windows XP> :(http://stackoverflow.com/ preguntas/617253/is-anyone-successfully-using-registration-free-com-with-net-components – MarkJ

5

¡Se advirtió que aparentemente el uso de COM libre de registro para componentes COM creados en .NET puede provocar bloqueos aleatoriamente en Windows XP!

Enlaces: Stackoverflow question donde aprendí esto, Microsoft knowledgebase article mencionado en esa pregunta. Hay una revisión, pero no está permitido redistribuirla.

2

Incluso es mucho más simple en Visual Studio: solo vaya a Referencias, encuentre las posiciones creadas por su ocx (debe haber 2, AxSomething y Algo) y configúrelas para las dos Aisladas: verdaderas en sus propiedades. No se manifiesta, no hay código. Ahora debería distribuir su exe con el archivo dll que contiene ocx. En su máquina de desarrollo, la ocx puede registrarse.

+0

Propiedad aislada no aparece en mi caso.Por cierto, hay una referencia a la lib de Stdole del sistema, y ​​esta tiene la propiedad Aislada. Al escanear el archivo csproj, veo que es un atributo (con Guid, VersionMajor, VersionMinor, ...), en lugar de los otros 2 que son y Intenté MUCHAS combinaciones para que esto funcione, como cambiar esas 2 a COMReferences, dándoles atributos Guid, VersionMajor, VersionMinor, pero no hay solución hasta ahora – sergiol

+0

¿Esto tendrá el mismo problema de bloqueo aleatorio en XP mencionado por MarkJ? –

+0

Me salvó mucho dolor en la espalda. –

1

Después de 10 horas de buscar cómo ejecutar aplicaciones VB6 con OCX en Win7 sin registrarlo y derechos de administrador, que encontraron la solución clic aquí: http://mmm4vb6.atom5.com/yes-update-0-12-5479.html#c

¿Necesita revisar Insertar Manifiesto para hacer que funcione. Funciona como encanto!

Sí publico la solución aquí, porque también encontré esta pregunta aquí.

+0

Siempre es bienvenido un enlace a una posible solución, pero agregue contexto alrededor del enlace para que los demás usuarios tengan una idea de qué es y por qué está allí. Siempre ** indique la parte más relevante de un enlace importante, en caso de que el sitio objetivo no esté disponible o permanezca desconectado de forma permanente. ** –

Cuestiones relacionadas