PDA

View Full Version : [C#] Quali dipendenze occorrono su progetto "Setup" con Access Database?


qwerty_race
01-05-2021, 18:23
Salve,
tramite Visual Studio Community 2019 vorrei realizzare un progetto di Setup per un applicazione WinForm che ho sviluppato.

Questa applicazione utilizza un database Microsoft Access per salvare i dati in locale.

Il database viene creato all'avvio del programma nel caso non sia già presente.

Per crearlo utilizzo ADOX in questo modo:


using ADOX;

Catalog database = new Catalog();
database.Create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=MyDatabase.mdb; Jet OLEDB:Engine Type=5");
database = null;


Quindi ho dovuto aggiungere un Riferimento ADOX al progetto

Il problema:

Quando clicco nell'eseguibile del mio progetto, non mi si avvia e non mi crea neppure il database.

Quando faccio il progetto di Setup oltre all'Output principale cosa devo aggiungere?

!fazz
03-05-2021, 11:14
un po poche informazioni, che errori ti da il programma? metti qualche log

qwerty_race
03-05-2021, 15:09
un po poche informazioni, che errori ti da il programma? metti qualche log

Ciao, ti ringrazio per la risposta ma volevo chiudere questo post perchè ho deciso di non fare creare il DB ma di copiarne uno già pronto, solo che dovrei aprire un altro post per il problema di scrittura, dato che me lo copia solo con permessi di lettura.

!fazz
04-05-2021, 13:46
strano io non ho mai avuto problemi di permessi nella copia di file utilizzando i progetti installer, sicuro che non sono problemi di path? (percorso che richiede autorizzazione uac?

comunque
hai provato a gestire i permessi sui file nell'ultima parte dell'installazione?

https://docs.microsoft.com/en-us/dotnet/api/system.io.file.setaccesscontrol?view=netframework-4.8

oppure alla primo run del programma

ps in quei casi probabilmente dovrai richiedere tramite manifest il grant dell'uac

https://docs.microsoft.com/en-us/previous-versions/bb756929(v=msdn.10)?redirectedfrom=MSDN

fammi sapere

!fazz

qwerty_race
04-05-2021, 14:28
Si erano problemi di percorso, stavo installando il Database nella solita directory del programma, in: C:\Program Files (x86)\MyApplication\

Ora sembra che installando il DB in: C:\Program Files (x86)\Common Files\MyApplication\ funzioni..., vediamo se è culo oppure ho fatto la cosa giusta

Mi sono affidato a questo post: https://www.vbforums.com/showthread.php ... es-creates

E' un po vecchiotto ma...

Per ora funziona, dci che è un caso?

Tu dove installi il database quando utilizzi un File-Database?

Nel Visual Studio non ho visto molte opzioni particolari tra le special Dir che puoi selezionare durante la creazione dell'installer, come puoi vedere nell'allegato.

!fazz
04-05-2021, 16:10
Si erano problemi di percorso, stavo installando il Database nella solita directory del programma, in: C:\Program Files (x86)\MyApplication\

Ora sembra che installando il DB in: C:\Program Files (x86)\Common Files\MyApplication\ funzioni..., vediamo se è culo oppure ho fatto la cosa giusta

Mi sono affidato a questo post: https://www.vbforums.com/showthread.php ... es-creates

E' un po vecchiotto ma...

Per ora funziona, dci che è un caso?

Tu dove installi il database quando utilizzi un File-Database?

Nel Visual Studio non ho visto molte opzioni particolari tra le special Dir che puoi selezionare durante la creazione dell'installer, come puoi vedere nell'allegato.

io di solito quando devo usare un db embedded ( sqlite ) il file del database di solito lo metto / lo faccio creare direttamente nel progetto winform in una sottocartella (tipo resources) così lo testo in maniera slegata dall'installer e con l'installer una volta impostato che la cartella và copiata nella bin folder sono apposto :D :D

facendo così non ho nessun problema nell'installazione con db presente, creazione db live,aggiornamento ota del db con sostituzione del db da ftp remoto ecc ecc.

se dovessi installare in una special path userei appdata, l'ho usata in un paio di progetti e non ho mai avuto problemi di permessi

qwerty_race
06-05-2021, 08:33
io di solito quando devo usare un db embedded ( sqlite ) il file del database di solito lo metto / lo faccio creare direttamente nel progetto winform in una sottocartella (tipo resources) così lo testo in maniera slegata dall'installer e con l'installer una volta impostato che la cartella và copiata nella bin folder sono apposto :D :D

facendo così non ho nessun problema nell'installazione con db presente, creazione db live,aggiornamento ota del db con sostituzione del db da ftp remoto ecc ecc.


azz..., allora è un problema di Access, io non ho usato sqlite, appena ho tempo provo a sostituirlo, se metti Access su \bin\myfolder\ non ha i permessi di scrittura, forse sbaglio qualcosa.

Sai per caso dell'esistenza di un tutorial passo passo su come fare un installer con i fiocchi?

!fazz
06-05-2021, 08:59
azz..., allora è un problema di Access, io non ho usato sqlite, appena ho tempo provo a sostituirlo, se metti Access su \bin\myfolder\ non ha i permessi di scrittura, forse sbaglio qualcosa.

Sai per caso dell'esistenza di un tutorial passo passo su come fare un installer con i fiocchi?

tutorial fatto bene non li ho mai trovati sono sempre andato per tentativi / trovando guide sui singoli aspetti che mi servivano, tipo schermate aggiuntive per aggiungere parametri, come eseguire codice pre e post installazione ecc ecc ma un buon tutorial fatto bene servirebbe :D


pensa che l'installer più complicato che mi è capitato di dover fare, era una cosa mostruosa che installa uno scada completo è stato talmente complicato che alla fine al posto di un progetto installer ho scritto un winform portable che tra installare apache php mysql, software di comunicazione macchina, configurare parametri dei servizi modifche al registro di windows, dongle hw di autenticazione, timezone localizzazione in 23 lingue 4 s.o. supportati ecc ecc solo quello è un progetto da tipo 70.000 righe e 2GB di eseguibili ed una tonnellata di msiexec :-)

qwerty_race
06-05-2021, 15:52
pensa che l'installer più complicato che mi è capitato di dover fare, era una cosa mostruosa che installa uno scada completo è stato talmente complicato che alla fine al posto di un progetto installer ho scritto un winform portable che tra installare apache php mysql, software di comunicazione macchina, configurare parametri dei servizi modifche al registro di windows, dongle hw di autenticazione, timezone localizzazione in 23 lingue 4 s.o. supportati ecc ecc solo quello è un progetto da tipo 70.000 righe e 2GB di eseguibili ed una tonnellata di msiexec :-)

:eek: :eek: :eek:

ok, ti aggiorno su come ho risolto tra qualche giorno, per ora ti ringrazio di tutto.

!fazz
06-05-2021, 16:58
:eek: :eek: :eek:

ok, ti aggiorno su come ho risolto tra qualche giorno, per ora ti ringrazio di tutto.

se hai qualche dubbio scrivi :-)

qwerty_race
08-05-2021, 07:45
se hai qualche dubbio scrivi :-)

No volevo assillarti/vi :D

In verità ancora non ho risolto.

Per fare l'installer e inserire il database nella solita directory dell'installazione faccio i seguenti passi:

1) Sull'albero della Soluzione: Aggiungi > Nuovo progetto > Setup Project

2) Nella finestra File System (Setup): > Application Folder > Add > Output Progetto > Output primario

3) Creo un collegamento sul Desktop dell'output primario

4) Sempre si Application Folder: Add > File > e aggiungo il database dalla cartella \bin\debug\

5) Imposto le proprietà del Setup: InstallAllUsers=True, RemovePreviousVersions=True

6) Nell'albero della soluzione, clicco sul progetto Setup > Proprietà > si apre la finestra "Pagine delle proprietà di Setup" ed eseguo i seguenti steps:
- Configurazione > Release

- Apro Gestione configurazione:
> Configurazione soluzione attiva: Release
> Contesti progetto...: Release, Release, Any CPU, Compila.

- Apro Prerequisites:
> Microsoft NET Framework 4.7.2 (x86 e x64)
> Scarica prerequisiti dal sito ....

7) Sempre sul progetto Setup "Compilo"

8) Sempre sul progetto Setup "Installo"

9) Il programma lo trovo installato in: C:\Program Files (x86)\Default Company Name\Setup\

Lo avvio e... :eek: :eek: :eek: :muro: :muro: :muro:

Azz..., l'ho fatto mentre scrivevo queste righe con un piccolo prog di test, e mi funziona...

Ho notato una cosa però: ogli volta che lo avvio il SO mi chiede se voglio consentire all'App di fare modifiche al sistema, fino ad ora non me lo ha mai chiesto, e neppure funzionava, BOO!!!

Se vuoi posso inviarti lo zip dell'intera soluzione di test, 570Kb, non lo posso allegare.

qwerty_race
16-05-2021, 17:09
se hai qualche dubbio scrivi :-)

Ciao,
ho reinstallato il Visual Studio e ora funziona tutto!!

Volevo chiederti solo una cos:

Il Database "MyDb.mdb" l'ho incluso tra i file della directory "Application Folder", vorrei che se un utente che installa il software e dopo 3 giorni installa una versione più recente, non elimini il Database, come posso fare?

!fazz
17-05-2021, 08:38
Ciao,
ho reinstallato il Visual Studio e ora funziona tutto!!

Volevo chiederti solo una cos:

Il Database "MyDb.mdb" l'ho incluso tra i file della directory "Application Folder", vorrei che se un utente che installa il software e dopo 3 giorni installa una versione più recente, non elimini il Database, come posso fare?

devi farlo via codice, io di solito faccio questi passi all'avvio dell'applicazione

1) guardo la versione del db vecchio(in una tabella)
2) guardo la versione del db nuovo (o una tabella o in un file di testo se online e di grandi dimensioni)
3) se la versione è compatibile non sostituisco il file
4) altrimenti cancello il db vecchio e copio il db nuovo nella cartella di produzione


praticamente tengo 2 nel progetto uno è quello vergine e l'altro è quello che viene usato dall'applicazione