Pregunta

He instalado SQL Server 2008 R2 En mi máquina (mi máquina funciona con Windows 2003 Server) algunas de las tablas dentro de mi db están fireing disparadores (cuando inserto, se produce la cancelación, actualización) el resultado de gatillo supuesta para llegar a algún tipo de proceso (triggersReceiver.exe a través de memoria compartida) que espera a los factores desencadenantes. el problema es que el servidor SQL Server 2008 R2 no reconoce este proceso el error que consigo cuando desencadenador se activa: triggersReceiver.exe no se está ejecutando. pero es runing !!!!! Se cualquiera enfrentó un problema similar antes ??

Este es el código de la de la "DLL conector" la parte que se ejecuta cuando cada vez un gatillo se dispara (este código se ejecuta a través de procedimiento almacenado extendido): toda la funcionalidad se encuentra en winbase.h (DLL de Windows)

////////Defenitions///////////////////////////////////////////////////////
#define XP_TRIGGER_SHARED_MEMEORY   L"Global\\xp_trigger_shared_memory"
#define XP_TRIGGER_PROCESS_EVENT    L"Global\\xp_trigger_process_event"
#define XP_TRIGGER_DONE_EVENT        L"Global\\xp_trigger_done_event"
////////////////////////////////////////////////////////////////////////////

Este falso devuelve la función (no sé por qué ...)

BOOL CTriggerGatewayConnector::Init()
{
::InitializeCriticalSection(&m_CS);

m_hMap = ::OpenFileMappingW(FILE_MAP_WRITE, FALSE, XP_TRIGGER_SHARED_MEMEORY);
if (m_hMap == NULL)
{

    return FALSE;
}

m_pSqlTrigInfo = (SqlTriggerInfo*)::MapViewOfFile(
                    m_hMap, FILE_MAP_WRITE, 0, 0,sizeof  (SqlTriggerInfo));
if (m_pSqlTrigInfo == NULL)
{
    return FALSE;
}

m_hProcess = ::CreateEventW(NULL, FALSE, FALSE, XP_TRIGGER_PROCESS_EVENT);
if (m_hProcess == NULL)
{
    return FALSE;
}

m_hDone = ::CreateEventW(NULL, FALSE, FALSE, XP_TRIGGER_DONE_EVENT);
if (m_hDone == NULL)
{
    return FALSE;
}

return TRUE;
}

Thnanks, Liran.

¿Fue útil?

Solución

El problema resuelto !!! En realidad, era un problema de permisos. cuando el trigger se disparó intenta escribir en el fichero de XP_TRIGGER_SHARED_MEMEORY Y fracasó continuación: m_hMap = :: OpenFileMappingW (FILE_MAP_WRITE, FALSE, XP_TRIGGER_SHARED_MEMEORY); si (m_hMap == NULL) {    falso retorno; } el gatillo activa realmente la DLL que se cargó con el servidor SQL, y el servidor SQL no tiene ningún tipo de permiso (TEVEN a través de la DLL en su interior) para escribir en el archivo ahe fragmento.

con el fin de resolverlo que necesita para dar servidor SQL los permmisions: Haga clic derecho en Mi PC -> Administrar -> servicios de aplicaciones y -> Servicios: ParaCada servicio de SQL: (en la lista de la derecha) 1. Haga clic derecho sobre él -> Propiedades -> Inicio de sesión Tab -.> Cambiar a cuenta del sistema local

Esperamos que ayude a somtime ..

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