【问题标题】:SQL Server CE - Internal error: Cannot open the shared memory regionSQL Server CE - 内部错误:无法打开共享内存区域
【发布时间】: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 运行时而不是进行文件复制时没有问题。

标签: sql-server-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

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 2013-08-30
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多