2010-09-27 2 views
1

Я установил SQL Server 2008 R2 На моей машине (моя машина запускает сервер Windows 2003) некоторые из таблиц внутри моего db являются триггерами запуска (при вставке, удалении, обновлении) Результат триггера должен достигнуть некоторого процесса (triggersReceiver.exe через разделяемую память), который ждет триггеров. проблема заключается в том, что SQL Server 2008 r2 не распознает этот процесс ошибку, которую я получаю при срабатывании триггера: triggersReceiver.exe не работает. но он бегает !!!!! Кто-нибудь сталкивался с подобной проблемой раньше?Sql Server 2008 r2 не распознает процесс при запуске

Это код, который в «разъем DLL» часть, которая выполняет, когда все триггер срабатывает (этот код выполняется с помощью расширенной хранимой процедуры): вся функциональность находится в WinBase.h (DLL 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" 
//////////////////////////////////////////////////////////////////////////// 

эта функция возвращает FALSE (я не знаю, почему ...)

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.

+0

Вам следует выслать некоторый код. – devio

+0

Когда вы отправляете код, вы можете выбрать его, а затем использовать кнопку '100100100', чтобы отформатировать ее правильно. –

+0

Извините, я буду в следующий раз .. :) – Liran

ответ

0

Проблема решена !!! Это действительно проблема разрешения. , когда триггер выстрелил, он пытается записать в файл XP_TRIGGER_SHARED_MEMEORY И здесь не удалось: m_hMap = :: OpenFileMappingW (FILE_MAP_WRITE, FALSE, XP_TRIGGER_SHARED_MEMEORY); if (m_hMap == NULL) { return FALSE; } триггер активировал DLL, загруженную на сервер sql, а сервер Sql не имеет разрешения (teven через dll внутри него) для записи в файл ah shard.

для того, чтобы решить эту проблему необходимо дать SQL сервер в permmisions: Щелкните правой кнопкой мыши на MyComputer -> Управление -> Службы и приложения -> Службы: ForEach SQL службы: (в списке справа) 1. Щелкните правой кнопкой мыши на нем -> Свойства -> вкладка LogOn -> изменить локальную учетную запись системы.

Надеюсь, что это поможет somtime ..