Question

J'ai installé SQL Server 2008 R2 Sur ma machine (ma machine fonctionne serveur windows 2003) quelques-unes des tables à l'intérieur de mon db sont fireing déclencheurs (quand insérer, supprimer, mettre à jour se produit) le résultat de déclenchement supposé atteindre certains processus (triggersReceiver.exe par l'intermédiaire de la mémoire partagée) qui attend les déclencheurs. le problème est que le SQL Server 2008 R2 ne reconnaît pas ce processus l'erreur que je reçois quand déclenchement des feux: triggersReceiver.exe ne fonctionne pas. mais il est runing !!!!! est une face à un problème similaire avant ??

Ceci est le code de la « dll connecteur » la partie qui exécute chaque fois que un déclencheur est tiré (ce code est exécuté par la procédure stockée étendue): toutes les fonctionnalités se trouve dans winbase.h (windows dll)

////////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"
////////////////////////////////////////////////////////////////////////////

cette fonction retourne FALSE (je ne sais pas pourquoi ...)

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.

Était-ce utile?

La solution

Le problème résolu !!! Il était en fait un problème d'autorisation. lorsque le déclencheur est lancé il tente d'écrire dans le fichier XP_TRIGGER_SHARED_MEMEORY Et il a échoué ici: m_hMap = :: OpenFileMappingW (FILE_MAP_WRITE, FALSE, XP_TRIGGER_SHARED_MEMEORY); if (m_hMap == NULL) {    return FALSE; } la gâchette activée en fait la dll qui a été chargé sur le serveur SQL et le serveur Sql n'a pas l'autorisation (Teven par la dll à l'intérieur) pour écrire Ahe fichier tesson.

afin de le résoudre, vous devez donner sql server les permmisions: Clic droit sur MyComputer -> Gérer -> Services et applications -> Services: ForEach Service SQL: (dans la liste à droite) 1. Cliquez droit sur le sujet -> Propriétés -> LogOn Tab -.> Changement de compte du système local

Je espère que ça vous aidera somtime ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top