2010-04-03 12 views
5

Ho un database SQL Server CE che funziona correttamente in dev, ma quando installato sul client ha un problema.SQL Server CE - Errore interno: impossibile aprire l'area della memoria condivisa

  • Le dipendenze di SQL Server CE 3.5 vengono copiate come parte della distribuzione.
  • Il computer di destinazione è un'immagine Ultimate a 32 bit Windows 7 pulita.

Il messaggio per l'eccezione nel registro eventi è:

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 

Sembra che questo è SSCE_M_CANTOPENSHAREDMEMORY e il sito dice che non v'è un valore stringa di connessione per cambiare questo e che questi problemi sono in genere non risolvibile dagli sviluppatori finali.

Qualcuno si è imbattuto in questo, e in caso affermativo sei riuscito a risolvere questo problema?

+0

Così, quando ho installare il runtime CE invece di fare file copiare non c'è problema. – blu

risposta

6

Hai ragione che il runtime CE deve essere installato. E se stai usando VS2010, devi assicurarti di installare SP2 dei runtime CE.

Anche con quello installato, mi sono imbattuto in questo. Nel mio caso, ho avuto un'istanza di SQL Server CE che funge da cache locale per un database che utilizza i servizi di sincronizzazione ADO.NET. È questo il tuo scenario?

ho scoperto che su macchine di test ho ottenuto questo errore:

  • Se la piattaforma fosse Vista o Windows 7 ; e
  • Se il database di SQL Server CE è stato installato con l'applicazione per
    risiedere in una directory protetta, tale come C: \ Program Files o C: \ Programmi
    Files (x86); e
  • Se il programma è stato eseguito utilizzando credenziali utente standard (vale a dire non aumentata a Administrator)

Soluzioni alternative per la condizione incluso:

  • esecuzione l'applicazione "come amministratore"; oppure
  • Configurazione del manifest dell'applicazione per richiedere le credenziali di amministratore; oppure
  • Rifattorizzazione dell'applicazione in modo che il file .sdf si trovasse in una directory non protetta, come C: \ ProgramData [qualche nome di sottodirectory] e modificando la stringa di connessione in modo che punti a tale area; oppure
  • Spostare l'intera directory dell'applicazione in uno spazio utente. Ad esempio, in "Documenti" o in uno spazio simile con diritti di accesso al file completo al file EXE e al file .SDF

    Ovviamente, ognuna di queste opzioni ha i suoi svantaggi.

+0

Rob grazie mille, mi hai salvato un sacco di tempo. – v00d00

0

Ho avuto lo stesso problema.

Windows 7.

Era perché l'utente si trovava in un dominio e le autorizzazioni erano concesse a "Tutti" e non riuscivano.

devono essere concesse al% dominio%/Ognuno

riguarda

Problemi correlati