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

时间:2010-04-03 16:24:52

标签: sql-server-ce

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

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

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

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,并且网站上说没有连接字符串值来更改它,并且这些问题通常无法由最终开发人员解决。

有没有人碰到这个,如果有的话你能解决这个问题吗?

2 个答案:

答案 0 :(得分:6)

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

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

我发现在测试机上我遇到了这个错误:

  • 如果平台是Vista或Windows 7;和
  • 如果SQL Server CE数据库是 与申请一起安装到 驻留在受保护的目录中,例如 如C:\ Program Files或C:\ Program
    档案(x86);和
  • 如果程序是使用运行的 标准用户凭证(即 没有升级到管理员)

条件的变通方法包括:

  • 运行应用程序“as 管理员“;或
  • 配置应用程序清单以要求管理员凭据;或
  • 重构应用程序,使.sdf文件位于不受保护的目录中,例如C:\ ProgramData [some subdirectory name],并修改连接字符串以指向该区域;或
  • 在用户空间中重新定位整个应用程序目录。例如,在“Documents”或某些类似的空间中,对EXE和.SDF文件具有完全文件访问权限

    显然,每个选项都有其缺点。

答案 1 :(得分:0)

我遇到了同样的问题。

Windows 7。

这是因为用户位于域中,并且权限被授予“Everyone”并失败。

必须授予%DOMAIN%/ Everyone

问候