Sql Server 2008 r2 не распознает процесс при запуске

StackOverflow https://stackoverflow.com/questions/3802485

  •  25-09-2019
  •  | 
  •  

Вопрос

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

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

эта функция возвращает 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, Лиран.

Это было полезно?

Решение

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

чтобы решить эту проблему, вам нужно предоставить sql-серверу разрешения:Щелкните правой кнопкой мыши «Мой компьютер» -> «Управление» -> «Службы и приложения» -> «Службы»:Для каждого SQL-сервис:(в списке справа) 1.Щелкните правой кнопкой мыши -> Свойства -> вкладка «Вход в систему» ​​-> измените учетную запись локальной системы.

Надеюсь, когда-нибудь это поможет..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top