2010-04-03 28 views
5

Tengo una base de datos SQL Server CE que funciona bien en dev, pero cuando está instalado en el cliente tiene un problema.SQL Server CE - Error interno: No se puede abrir la región de memoria compartida

  • Las dependencias de SQL Server CE 3.5 se copian como parte de la implementación.
  • La máquina de destino es una imagen limpia de Windows 7 de 32 bits Ultimate.

El mensaje de excepción en el registro de eventos es:

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 

Parece que este es SSCE_M_CANTOPENSHAREDMEMORY y el sitio dice que no es un valor de cadena de conexión para cambiar esto y que estas cuestiones son típicamente no se puede resolver por los desarrolladores finales.

¿Alguien se ha encontrado con esto y, de ser así, ha podido resolver el problema?

+0

Por eso, cuando se instala el tiempo de ejecución de la CE en lugar de hacer copiar el archivo no hay ningún problema. – blu

Respuesta

6

Tiene razón al tener que instalar el tiempo de ejecución de CE. Y si usa VS2010, debe asegurarse de instalar el SP2 de los tiempos de ejecución de CE.

Incluso con eso instalado, me he encontrado con esto. En mi caso, tenía una instancia de SQL Server CE que actúa como memoria caché local para una base de datos que utiliza ADO.NET Synchronization Services. ¿Es este tu escenario?

me encontré con que en las máquinas de prueba me dio este mensaje:

  • Si la plataforma era Vista o Windows 7 ; y
  • Si la base de datos de SQL Server CE se instala con la aplicación de
    residir en un directorio protegido, tales como C: \ Archivos de programa o C: \ Program
    Files (x86); y
  • Si el programa se ha ejecutado utilizando credenciales de usuario estándar (es decir, no se extendió a Administrador)

Soluciones provisionales para la condición incluye:

  • Ejecución de la aplicación "como administrador"; o
  • Configurando el manifiesto de la aplicación para requerir credenciales de administrador; o
  • Refactorizando la aplicación para que el archivo .sdf se encuentre en un directorio desprotegido, como C: \ ProgramData [algún nombre de subdirectorio] y modifique la cadena de conexión para que apunte a esa área; o
  • Reubicación de todo el directorio de la aplicación en un espacio de usuario. Por ejemplo, en "Documentos" o algún espacio similar con derechos de acceso completo a archivos al EXE y al archivo .SDF

    Obviamente, cada una de esas opciones tiene sus desventajas.

+0

Rob muchas gracias, me has ahorrado mucho tiempo. – v00d00

0

Tuve el mismo problema.

Windows 7.

Se debió a que el usuario estaba en un Dominio y los permisos se otorgaron a "Todos" y fallaron.

Hay que admitir que el dominio%%/Todo el mundo

respecto

Cuestiones relacionadas