Pregunta

Nuestro producto contiene un servidor COM en proceso VC ++ ATL con dos clases expuestas a COM: ClassA y ClassB. Este servidor COM se agrega a un paquete de instalación Install Shield 2008 y " COM Extract at Build " la propiedad está establecida para el componente.

ClassA y ClassB están expuestos de manera exactamente idéntica por el componente: hay un archivo .rgs para cada uno, ambos archivos .rgs se compilan en los recursos del componente y se invoca CAtlModule :: UpdateRegistryFromResourceS () para ambos.

Sin embargo, cuando ejecutamos regsvr32 en el servidor COM, ambas clases están expuestas al registro correctamente, pero cuando ejecutamos la instalación del paquete, Install Shield expone solo una de ellas.

¿Cómo instala Install Shield qué cambios en el registro debe realizar? ¿Qué debemos verificar para detectar la fuente del problema?

¿Fue útil?

Solución

Sospecho que usan RegOverridePredefKey (al menos MSDN sugiere que deberían): http://msdn.microsoft.com/en-us /library/ms724901(VS.85).aspx

Después de que las claves de destino se hayan reemplazado en alguna ubicación privada, InstallShield puede analizar la estructura del registro y generar un script para ella.

Sin embargo, todo esto es una conjetura, no sé qué hace realmente InstallShield, pero creo que empezaría con RegMon mientras se ejecuta la compilación de InstallShield, para ver si puedo discernir dónde van los registros y luego tratar de detectar qué es lo que hace mal.

Otros consejos

Si desea una explicación detallada (o todo lo que se le permite dar), querrá ir al foro de la Comunidad InstallShield y publicar una pregunta para el empleado de InstallShield, MichalU. Si desea saber en general cómo funcionan estas cosas, puede consultar el código fuente de WiX, ya que Heat tiene la capacidad de extraer información de com.

Si el extracto de COM en la compilación le causa problemas, puede desactivarlo e insertar los datos de COM de forma estática.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top