es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Lectura compartida de archivos de registro entre procesos

Buscando consejos sobre cómo manejar esto:

ProgA (código no gestionado) escribe en un archivo de registro.
Puedo modificar la ubicación del registro (incluso dirigirlo a una tubería).

ProgB (código gestionado – C – Windows) necesita leer el archivo de registro después de eventos específicos.

Lo que intento lograr es que ProgB lea el archivo de registro de ProgA después de dichos eventos (que son desencadenados por ProgB).
La sincronización de esto sería fácil si el registro fuera escrito directamente por ProgA… pero no lo es. Parece que se almacena en búfer internamente en ProgA o tal vez es el sistema de archivos el que se almacena en búfer, o ambos. De cualquier manera, la escritura se retrasa y el retraso varía mucho.

Buscando sugerencias de una técnica para utilizar aquí para que la lectura sea lo más rápida y fluida posible.

Un par de ideas aproximadas que tuve son:

WaitForSingleObject – no estoy seguro si hay algún objeto estándar aquí que sería útil.

Algunos otros eventos a nivel de sistema de archivos o de archivo a los que pueda conectar?

Bucle cronometrado para simplemente sondear cambios en el tamaño del archivo – feo, pero estoy seguro de que funcionaría, convenientemente me daría la cantidad de nuevos datos para leer.

Encauzar el archivo de registro de alguna manera para que ProgB pueda acceder a él?

Determinar el tamaño del búfer y asegurarme siempre de que después de mis interacciones se alcance ese tamaño (forzando una escritura inmediata) – muy feo, en el peor de los casos.

Hacerse cargo de WriteFile() de ProgA a través de la inyección de una DLL (preferiría no alterar ProgA de ninguna manera).

¿Algo completamente diferente?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Consejos sobre cómo manejar la lectura de archivos de registro en código no administrado por código administrado.

    Si tienes el ProgA (código no administrado) escribiendo en un archivo de registro cuya ubicación puedes cambiar, y el ProgB (código administrado – C – Windows) necesita leer el archivo de registro después de eventos específicos, la sincronización entre los dos se podría lograr fácilmente si el registro fuera escrito directamente por ProgA. Sin embargo, parece que la escritura está almacenada en búfer internamente por ProgA o por el sistema de archivos, lo que provoca demoras que varían mucho. Teniendo esto en cuenta, existen varias técnicas que puedes usar para hacer que la lectura del registro sea rápida y sin problemas:

    1. Usa WaitForSingleObject: Aunque puede que no haya un objeto estándar útil aquí, aún puedes usar esta técnica para sincronizar el evento entre ProgA y ProgB.
    2. Conéctate a otros eventos del sistema de archivos o a nivel de archivo: Esto te permitirá sincronizar el evento entre ProgA y ProgB al leer el archivo de registro después de que ocurra el evento específico.

    3. Usa un bucle de tiempo para verificar cambios en el tamaño del archivo: Aunque esta es una solución poco elegante, funcionará y te dará convenientemente la cantidad de datos nuevos para leer.

    4. Redirecciona el archivo de registro de alguna manera para que ProgB pueda acceder a él: Esta técnica permitirá que ProgB lea el archivo de registro en tiempo real, mientras se está escribiendo.

    5. Determina el tamaño del búfer y asegúrate siempre de que se alcance después de tus interacciones: Esta técnica implica forzar una escritura inmediata después de tus interacciones y es el último recurso extra feo.

    6. Intercepta WriteFile() de ProgA a través de la inyección DLL: Aunque preferirías no modificar ProgA de ninguna manera, aún puedes usar la inyección DLL para lograrlo si es necesario.

    Elige la técnica que mejor se adapte a tus necesidades y úsala para sincronizar los eventos entre ProgA y ProgB.

Comments are closed.