SQL Server CE - 内部错误:无法打开共享内存区域

Posted

技术标签:

【中文标题】SQL Server CE - 内部错误:无法打开共享内存区域【英文标题】:SQL Server CE - Internal error: Cannot open the shared memory region 【发布时间】:2010-04-03 16:24:51 【问题描述】:

我有一个 SQL Server CE 数据库,可以在 dev 中正常工作,但安装在客户端上时出现问题。

SQL Server CE 3.5 依赖项将作为部署的一部分进行复制。 目标计算机是干净的 Windows 7 32 位 Ultimate 映像。

事件日志中的异常消息是:

Message: Internal error: Cannot open the shared memory region. 
Stack Trace: at System.Data.SqlServerCe.SqlCeConnection.ProcessResults(Int32 hr) at
System.Data.SqlServerCe.SqlCeConnection.Open(Boolean silent) at
System.Data.SqlServerCe.SqlCeConnection.Open() at
System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user) at
System.Data.Linq.SqlClient.SqlProvider.Execute(
    Expression query, 
    QueryInfo queryInfo,
    IObjectReaderFactory factory, 
    Object[] parentArgs, 
    Object[] userArgs,
    ICompiledSubQuery[] subQueries, 
    Object lastResult) at
System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(
    Expression query, 
    QueryInfo[] queryInfos,
    IObjectReaderFactory factory, 
    Object[] userArguments, 
    ICompiledSubQuery[]
    subQueries) at
System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(
    Expression query) at
System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at 
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at
System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at
Application specific stuff here

看起来这是SSCE_M_CANTOPENSHAREDMEMORY,并且该网站说没有连接字符串值可以更改它,并且这些问题通常无法由最终开发人员解决。

有没有人遇到过这个问题,如果有,你能解决这个问题吗?

【问题讨论】:

所以当我安装 CE 运行时而不是进行文件复制时没有问题。 【参考方案1】:

您说得对,必须安装 CE 运行时。如果您使用的是 VS2010,则必须确保安装了 CE 运行时的 SP2。

即使安装了它,我也遇到了这个问题。在我的例子中,我有一个 SQL Server CE 实例充当使用 ADO.NET 同步服务的数据库的本地缓存。这是你的场景吗?

我发现在测试机器上出现了这个错误:

如果平台是 Vista 或 Windows 7;和 如果 SQL Server CE 数据库是 与应用程序一起安装到 驻留在受保护的目录中,例如 作为 C:\Program Files 或 C:\Program 文件(x86);和 如果程序使用 标准用户凭据(即 未上报给管理员)

包括以下情况的解决方法:

运行应用程序“作为 管理员”;或

将应用程序清单配置为需要管理员凭据;或

重构应用程序,使 .sdf 文件位于不受保护的目录中,例如 C:\ProgramData[某个子目录名称],并修改连接字符串以指向该区域;或

在用户空间中重新定位整个应用程序目录。例如,在“文档”或具有对 EXE 和 .SDF 文件的完全文件访问权限的类似空间中

显然,这些选项中的每一个都有其缺点。

【讨论】:

【参考方案2】:

我遇到了同样的问题。

Windows 7。

这是因为用户在域中,并且授予“所有人”的权限但失败了。

必须授予 %DOMAIN%/Everyone

问候

【讨论】:

以上是关于SQL Server CE - 内部错误:无法打开共享内存区域的主要内容,如果未能解决你的问题,请参考以下文章

安装后无法访问 SQL Server CE DB

如何解决我的 SQL Server CE 错误?

无法让 SQL Server CE 与 Visual Studio 2005 和 Windows CE 5.0 一起使用

SQL 2005 用IP连接时 提示发生内部连接致命错误 这是为啥?我重装了SQL server2005后还是这样 求解答

SQL Server CE 文件位置

连接sql server2005时提示:内部连接致命错误。