Newsgroup: it.comp.lang.visual-basic
Titolo: Installare correttamente il "Redistributable" System.Data.SQLite

 
Salve a tutti :-)
 
Ho creato un piccolo programma con VS2010 e invece di usare il solito 
database .MDB ho voluto fare delle prove con SQLIte, installando la 
libreria: System.Data.SQLite.dll
 
 
Il programma funziona correttamente su due PC, ma in entrambi ho 
installato l'ambiente di sviluppo.
 
Non riesco a farlo funzionare negli altri PC (dove ovviamente non DEVO 
installare l'ambiente di sviluppo)... ma in quei PC l'installazione 
della libreria System.Data.SQLite.dll non riesce.
 
L'errore del programma, sia installato tramite il metodo della 
"pubblicazione" di VS2010, sia tramite innosetup, mi da questo errore:
 
---
Le informazioni su come richiamare il debug JIT (Just-In-Time) anziché 
questa finestra
sono riportate in fondo al messaggio.
 
************** Testo dell'eccezione **************
System.IO.FileNotFoundException: Impossibile caricare il file o 
l'assembly 'System.Data.SQLite.dll' o una delle relative dipendenze. 
Impossibile trovare il modulo specificato.
Nome file: 'System.Data.SQLite.dll'
    in 
WindowsApplication1.OTO__CLDataSetTableAdapters.ClientiTableAdapter.Fill(ClientiDataTable 
dataTable)
    in WindowsApplication1.frmMain.frmMain_Load(Object sender, EventArgs e)
    in System.EventHandler.Invoke(Object sender, EventArgs e)
    in System.Windows.Forms.Form.OnLoad(EventArgs e)
    in System.Windows.Forms.Form.OnCreateControl()
    in System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    in System.Windows.Forms.Control.CreateControl()
    in System.Windows.Forms.Control.WmShowWindow(Message& m)
    in System.Windows.Forms.Control.WndProc(Message& m)
    in System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    in System.Windows.Forms.Form.WmShowWindow(Message& m)
    in System.Windows.Forms.Form.WndProc(Message& m)
    in 
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    in System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    in System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 
msg, IntPtr wparam, IntPtr lparam)
 
 
 
 
************** Assembly caricati **************
mscorlib
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.239 (RTMGDR.030319-2300)
     Base di codice: 
file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
OTO-CL
     Versione assembly: 0.9.0.0
     Versione Win32: 0.9.0.0
     Base di codice: file:///C:/Programmi/OTO-CL/OTO-CL.exe
----------------------------------------
Microsoft.VisualBasic
     Versione assembly: 10.0.0.0
     Versione Win32: 10.0.30319.1 built by: RTMRel
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.236 built by: RTMGDR
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Core
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.233 built by: RTMGDR
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Windows.Forms
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.235 built by: RTMGDR
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.1 built by: RTMRel
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Runtime.Remoting
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.1 (RTMRel.030319-0100)
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
System.Data
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.237 (RTMGDR.030319-2300)
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
System.Xml
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.233 built by: RTMGDR
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.235 built by: RTMGDR
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_it_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
System.Data.DataSetExtensions
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.1 built by: RTMRel
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Data.DataSetExtensions/v4.0_4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll
----------------------------------------
System.Numerics
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.1 built by: RTMRel
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
----------------------------------------
Accessibility
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.1 built by: RTMRel
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
System.Configuration
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.1 (RTMRel.030319-0100)
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
mscorlib.resources
     Versione assembly: 4.0.0.0
     Versione Win32: 4.0.30319.235 (RTMGDR.030319-2300)
     Base di codice: 
file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_it_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
 
************** Debug JIT **************
Per abilitare il debug JIT, è necessario impostare il valore
jitDebugging nella sezione system.windows.forms del file di configurazione
dell'applicazione o del computer (machine.config).
L'applicazione inoltre deve essere compilata con il debug
abilitato.
 
Ad esempio:
 
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
 
Quando il debug JIT è abilitato, tutte le eccezioni non gestite
vengono inviate al debugger JIT registrato nel computer,
anziché essere gestite da questa finestra di dialogo.
 
---
 
 
Ovviamente la libreria System.Data.SQLite.dll l'ho copiata nella 
cartella dei programmi e anche in System32...
 
Se non la vede evidentemente va copiata da qualche altra parte.
 
Ho pensato bene di installarla usando i file che ho scaricato da questo 
sito:
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
 
 
in particolare con scaricando i file relativi al FW 4.0 (su cui è basato 
il programmino) a 32bit:
- sqlite-netFx40-setup-bundle-x86-2010-1.0.79.0.exe
- sqlite-netFx40-setup-x86-2010-1.0.79.0.exe
 
con i quali ottengo questo errore:
    "The Microsoft .NET Framework v4.0 with Service Pack 0 or higher is 
required"
 
Ma il FW 4.0 è installato al 100% (in effetti il programma, dopo 
l'errore, se clicco su continua, parte... ma non legge/scrive il DB)
 
Ho proavato anche con questi:
sqlite-netFx40-binary-bundle-Win32-2010-1.0.79.0.zip
sqlite-netFx40-binary-Win32-2010-1.0.79.0.zip
sqlite-netFx40-static-binary-bundle-Win32-2010-1.0.79.0.zip
sqlite-netFx40-static-binary-Win32-2010-1.0.79.0.zip
 
 
con i quali ottrengo quest'altro errore, dopo aver scompattato i file 
.ZIP e cliccato sul programma "install"
 
System.Data.SQLite Design Installer
Cannot continue, the "confirm" option is not enabled
 
 
Ho provato anche ad installare un'altra libreria, presa da questo sito:
http://sqlite.phxsoftware.com/
 
 
Insomma... in definitiva penso di aver fatto un bel casino :-)
Sono tentato di modificare il progetto per usare il classico .MDB
 
E pensare che all'inizio, quando ho pensato di usare SQLite, avevo letto 
che bastava copiare la relativa .DLL nella cartella del programma :-\
 
Sbaglio qualcosa? Certamente si... ma non ho capito se nell'usare il 
giusto "redistributable" o in qualche impostazione di VS2010
 
Ringrazio Anticipatamente per le Risposte :-)
 
 
-- 
Daniele Pinna  (leva oops. per rispondere)
Utente Skype: dapinna
Sito Web: 
http://www.dapinna.com
 
Il Docfa in Pillole:  
http://www.ildocfainpillole.it
 
DAPINNA.COM
 su Facebook: 
www.facebook.com/pages/Sassari-Italy/DAPINNACOM/110085322371199
 
-----
** Now Powered by Linux KUbuntu 11.10 "Oneric Ocelot" **
 


 
Forse ho risolto (spero che non sia un caso, per ora ho provato solo su 
un PC)...
 
Cmq ho modificato il file System.Data.SQLite che lincavo nel progetto e 
ne ho inserito un altro, proveniente dal file 
sqlite-netFx40-static-binary-Win32-2010-1.0.79.0.zip
 
In particolare ho usato (fra i riferimenti) System.Data.SQLite.dll
e l'ho anche copiato nella cartella del programma insieme a 
SQLite.Interop.dll.
 
 
 
 
 
-- 
Daniele Pinna
DAPINNA.COM
 
(leva oops per rispondere)
-----
Utente Skype: dapinna
DAPINNA.COM
        :  
http://www.dapinna.com
 
Il Docfa in Pillole:  
http://www.ildocfainpillole.it
 - Sito Aggiornato!!!
DAPINNA.COM
 su Facebook: 
www.facebook.com/pages/Sassari-Italy/DAPINNACOM/110085322371199
 
 

Occhio ad utilizzare la versione .NET specifica per l'ambiente sul quale viene installato.
Se è x86 deve girare una versione, se è x64 ne server un'altra.
 
Ad occhio, poi, io utilizzerei la versione bundle (sqlite-netFx40-binary-bundle-Win32-2010-1.0.79.0.zip), quella senza la dll di Interop che dovrebbe essere la versione unmanaged.
 
Io sono un pò indietro con sqlite in quanto il mio software per ottici è in .net 2.0 ed uso ancora la vecchia versione della dll che era un pò diversa da quelle attuali.
 
Nicola
 
 

 Io sono un pò indietro con sqlite in quanto il mio software per ottici è in .net 2.0 ed uso ancora la vecchia versione della dll che era un pò diversa da quelle attuali.
 
 
 


 Salve a tutti :-)
occhio che devi scaricare la versione giusta per il Framework che hai 
installato!
Non puoi installare il NET4.0 e usare SQlitedata 3.5...ti esplode come 
hai visto!
se però lo fai funziona alla grande ...tranquillo! Persino su Aruba 
checchè aruba dica di no!
 
-- 
----- Italliaaaaa 3227! -----
Quando vedi la tua verità fiorire sulle labbra del tuo nemico, devi 
gioire, perché questo è il segno della vittoria.
(Giorgio Almirante)
 
 

 Sicuramente è da provare/capire come risolvere eventuali problemi della libreria quando la destinazione è x64 invece che x86  (presumo basti copiare la giusta DLL... )
 
Si, è sufficiente copiare la giusta dll. Io con InnoSetup ho creato uno script di installazione che fa un controllo sulla piattaforma in cui sta installando e provvede a copiare la dll corretta.
 
Come ti diceva il buon Wodka, con SQLite ci fai veramente di tutto e gira praticamente ovunque.
Il grande vantaggio è la sua estrema leggerezza... pochi kb sono sufficienti ad avere l'intero motore del db!
 
Nicola

 Il grande vantaggio è la sua estrema leggerezza... pochi kb sono sufficienti ad avere l'intero motore del db!
 
Be si infatti è leggendo sopratutto in questo NG che ho deciso di 
studiare SQLite :-)))


 checchè aruba dica di no!
 
Aruche? ;-)))))
 
(mi tengo il più lontano possibile dal quel provider... :-) )


 SQLite.Interop.dll.
 
Invece non ho risolto per nulla :-(
 
Questo pomeriggio ho provato su un PC fresco fresco, dove nei giorni 
scorsi avevo i problemi, e oggi, dopo le ultime correzioni, il programma 
si è installato e ha funzionato senza problemi.
 
Poco fa l'ho provato su un altro PC, non installato di recente, ma dove 
tutto quello che deve funzionare funziona...
Il programmino si installare regolarmente, ma poi da l'errore che non 
trova System.Data.SQLite (quello riportato nel post di apertura).
 
 
 
-- 
Daniele Pinna  (leva oops. per rispondere)
Utente Skype: dapinna
Sito Web: 
http://www.dapinna.com
 
Il Docfa in Pillole:  
http://www.ildocfainpillole.it
 


 Il 03/02/2012 16:43, Daniele Pinna (Ufficio) ha scritto:
zac
 
Occhio che  il system.data.sqlite ce ne sono di vari tipi....quello con 
Interop.dll e quello con linq.dll...
Il primo è un wrapper alle funzioni credo c di interop...il secondo ha 
(credo)tutto dentro di se.
Ma non è finita qui
c'ho sbattuto il capo anche io....progetto FW4 SQLite....sul mio va 
bene...su altri no!
 
Sembra idiota dirlo ma la colpa è ancora una volta dall'inferno delle 
dll....sembrava risolto?...mo rientra dalla finestra!
 
 
sqlite....FINO A  POCO TEMPO FA supportava FW 3.5....anche io ho 
trovato una versione "spippolata" che supportava fw 4....però "a quei" 
tempi ad esempio entity lo s(o)upportava solo con fw 3.5!
In buona sostanza....occhio che il GPL è cosi: deve star dietro allo 
sviluppatore non alle "novità".
Nicola t'ha detto che va con il 2.0....io alla fine ho la webApp che va 
con fw 3.5 e sqlite...nel mio pc un miniprogetto con fw4 m'ha fatto 
perdere un giorno per referenziare ed aggiornare componenti.
 
Cmq alla fin fine...vedrai che è solo un problema di dll giuste da 
copiare....WELCOME AGAIN IN DLL HELL! BUUUAAAAHAHAHAHAH!(risata 
satanica)
 
p.s.
Il dll hell riappare perchè gestisci una risorsa un-managed:...il core  
C delle funzioni sqlite.
..incapsulato in un wrapper net!
 
-- 
----- Italliaaaaa 3227! -----
Era Cecco, il figlio del fornaio; era un orribile butterato napoletano, 
col culo molto basso ed un alito agghiacciante tipo fogna di Calcutta.
(Fantozzi)
 
 

 ..incapsulato in un wrapper net!
 
Quindi avrei dovuto scegliere una strada diversa per implementare 
SQLite? Oppure era una strada "obbligata"?


 Oppure era una strada "obbligata"?
 
Su Aruba...io uso FW 3.5 e
SQLITE
1.0.66
nome interno: sqlite.interop.dll
presa da
http://sourceforge.net/projects/sqlite-dotnet2/
 
la metto dentro bin ed ho sqlite nel sito web!
 
Per il progetto 
vb.net
 invece
FW 4.0 e sqlite 1.0.74.0 (versione runtime v4.0.30319)...sempre nome 
interno: sqlite.interop.dll
referenziando sia il system.data.sqlite che il system.data.sqlite.linq
...ho preso il tutto da qui
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
 
il mio è sqlite-netFx40-binary-bundle-Win32-2010-1.0.74.0.zip...ora 
vedo ...c'è la versione 79!
 
Saluti
 
-- 
----- Italliaaaaa 3227! -----
Soldato Joker, cosa ci fa il soldato Palla di Lardo con quel fucile in 
mano nel mio fottutissimo bagno?
 
Sergente Artman [ da: "Full Metal Jacket" ]
 
 

 Puoi condividere lo script?
 
Eccolo!
 
 
Nella sezione [SETUP] incolla questo:
 
; "ArchitecturesInstallIn64BitMode=x64" requests that the install be
; done in "64-bit mode" on x64, meaning it should use the native
; 64-bit Program Files directory and the 64-bit view of the registry.
; On all other architectures it will install in "32-bit mode".
ArchitecturesInstallIn64BitMode=x64
; Note: We don't set ProcessorsAllowed because we want this
; installation to run on all architectures (including Itanium,
; since it's capable of running 32-bit code too).
 
 
Questo nella sezione [FILES]
 
; Installa la versione x64 delle DLL se siamo in 64-bit mode (x64; vedi sopra),
Source: ..\..\bin\SQLite DLL\x64\System.Data.SQLite.DLL; DestDir: {app}; DestName: System.Data.SQLite.DLL; Check: Is64BitInstallMode; Flags: ignoreversion
;Installa la versione x86 in tutti gli altri casi
Source: ..\..\bin\SQLite DLL\x86\System.Data.SQLite.DLL; DestDir: {app}; Check: not Is64BitInstallMode; Flags: ignoreversion
 
Et voilà!
 
Trovi molti esempi interessanti sotto la cartella di installazione di Inno Setup (tipicamente C:\Program Files\Inno Setup 5\Examples)
 
Nicola

 Eccolo!
 
[CUT]
 
Grazie :-)
 
 
 
-- 
Daniele Pinna  (leva oops. per rispondere)
Utente Skype: dapinna
Sito Web: 
http://www.dapinna.com
 
Il Docfa in Pillole:  
http://www.ildocfainpillole.it
 
