Necesito mi Servicio para actualizar campos en la memoria compartida para que una aplicación cliente los lea y muestre. He encontrado que mi solución actual es ineficaz debido a Session 0 Isolation.Compartir la memoria entre el servicio de Windows y la aplicación, ¿qué es más fácil?
He cambiado el nombre del mutex
es en el espacio de nombres global que fija ese elemento, pero no se ve como si el DLL será susceptible de intercambio de información entre sesiones a pesar de una solución a la sesión 0 Aislamiento ser:
"Elija explícitamente el espacio de nombres Local \ o Global \ para cualquier objeto con nombre, como los eventos o la memoria mapeada que el servicio pone a disposición."
No sé qué parte de la dll se puede clasificar como un objeto con nombre y tardará demasiado tiempo en volver a instalarla y recorrerla para comprobar.
Vi los volúmenes de código para los canales con nombre y se suspendió. No quiero crear un archivo que toque el disco, como supongo que se requiere de la solución memoryMappedFile. ¿Se pueden hacer funcionar las secciones compartidas de dlls? De lo contrario, ¿qué es más fácil?
public ref class ServerGUIBridge
{
public:
#pragma data_seg(".sdata")
static int commonIntShouldBeGlobal = 0;
static bool hasBeenInitializedMakeMeGlobal = false;
#pragma data_seg()
#pragma comment(linker, "/section:.sdata,rws")
Estoy usando .NET 2.0 así que no WCF por favor.
Si crea el archivo mapeado en memoria con INVALID_FILE_HANDLE, entonces no se crea ningún archivo. Es solo memoria que se desplaza cuando no se accede por un tiempo. Tenga en cuenta que las secciones compartidas son un agujero de seguridad; no puede poner ACL en una sección compartida. (¿Qué sucede si un cliente entra y hace 'hasBeenInitializedMakeMeGlobal = false' o' commonIntShouldBeGlobal = rand() '?) –
@Raymond" Si hFile es INVALID_HANDLE_VALUE, el proceso de llamada también debe especificar un tamaño para el objeto de mapeo de archivos en dwMaximumSizeHigh y los parámetros dwMaximumSizeLow. En este escenario, CreateFileMapping crea un objeto de asignación de archivos de un tamaño específico que está respaldado por el archivo de paginación del sistema en lugar de por un archivo en el sistema de archivos. " - Entonces, ¿dónde está respaldado si el archivo de paginación del sistema está desactivado? – John
"Respaldado por el archivo de paginación del sistema" es una redacción pobre. Realmente debería ser "respaldado por el sistema de memoria virtual". Si el archivo de paginación está deshabilitado, entonces el sistema de memoria virtual es solo memoria física. –