2010-03-17 11 views
25

Windows 7 está almacenando en caché parte de la información de la clase COM. Los sistemas operativos anteriores no hacían esto. Después de que el sistema operativo busca el valor HKCU\Software\Classes\CLSID\{GUID}\LocalServer32, almacena en caché el valor y no lo busca de nuevo.Cómo evitar que Windows guarde en caché la información de la clase Com?

Cuando actualizamos nuestro software, colocamos las nuevas actualizaciones en un directorio diferente y luego actualizamos el valor HKCU\Software\Classes\CLSID\{GUID}\LocalServer32 para reflejar la nueva ruta. La próxima vez que se ejecute el software, utilizará los archivos más recientes si se ejecuta en sistemas operativos anteriores de Windows. Sin embargo, en Windows 7, continuará utilizando el archivo anterior, hasta que se reinicie el sistema operativo.

Ejecuté el monitor de procesos y descubrí que en Windows 7 nunca vuelve a leer la clave de registro después de la primera lectura. En sistemas operativos más antiguos, lee esa clave cada vez.

Mi pregunta es: ¿hay alguna manera de obligar a Windows 7 a volver a leer la información de LocalServer32 desde la sección HKCU cada vez que se crea un nuevo objeto COM fuera de proc?

+3

Supongo que su servidor COM (.exe) registra algunas clases (CoRegisterClassObject) durante su inicialización. ¿Estás seguro de que llama a CoRevokeClassObject para todas las clases registradas y se cierra antes de que puedas actualizar? –

+0

Siguiendo a @SimonMourier, ¿el proceso anterior aún está en ejecución o se ha cerrado? Si todavía está funcionando, ese es su problema. – Ben

+0

¿Ha reiniciado la PC después de actualizar el registro COM? –

Respuesta

1

Como este es un resultado superior en Google para este problema estrecho, pensé que sería valioso agregar mi resultado de resolución de problemas para este problema.

He encontrado esta respuesta en SO: C# : How to change windows registry and take effect immediately

y la solución de enlace desde esa respuesta: Registry Watcher C#

Ambos de los cuales parecen opciones viables para la gestión de claves cambiados sin forzar un reinicio. Para nosotros (como el OP) esto fue cuando instalamos actualizaciones. Para nosotros (posiblemente a diferencia del OP) esto es poco frecuente y decidimos que el esfuerzo de implementar y probar una solución como se describió fue superado por la simple solución de requerir un reinicio: un proceso que los usuarios de Windows esperan con la instalación del software.

2

sólo he sido capaz de resolver este problema ...

1: Detener el proceso

2: la anulación del registro de forma explícita utilizando regsvr32 la biblioteca (o exename/unregserver)

3: Registro del nuevo componente

4: Inicio de la copia de seguridad del proceso.

Sospecho que es la parte de Un Reg que está fallando para usted. Si solo está cambiando la clave de registro directamente, debería llamar a RegSvr32/u en su lugar.

También asegúrese de que la nueva ubicación del directorio sea el directorio actual cuando llame a RegSvr32.

Tenga en cuenta que siempre he detenido el proceso y luego no registrado, esto es probablemente un detalle significativo.

Cuestiones relacionadas