我已经安装了SQL Server 2008 R2在我的机器(我的机器上运行Windows Server 2003) 我的一些数据库中的表都fireing触发(当插入,删除,更新时) 其应该达到一些过程(triggersReceiver.exe经由共享存储器)触发结果等待触发器。 问题是,在SQL Server 2008 R2不承认这个过程中的错误,我得到当触发器触发: triggersReceiver.exe没有运行。 但他乳宁!!!!! 是任一面对??

前一个类似的问题

这是,“连接器DLL”的部分执行的当过一个触发器被触发(通过扩展存储过程代码执行)的代码: 所有的功能是在WINBASE.H实测值(窗口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); 如果(m_hMap == NULL) {    返回FALSE; } 触发实际激活已加载到SQL Server的dll,和SQL Server 没有任何权限(通过在其内部的dll teven)写入AHE碎片文件。

为了解决这个问题,你需要给SQL Server中permmisions: 右键点击我的电脑 - >管理 - >服务和应用程序 - >服务: 的的ForEach SQL服务:(在右边的列表) 1.右键点击它 - >属性 - >登录选项卡 - >更改为本地系统帐户

希望这将有助于somtime ..

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top