Newsgroup: it.comp.lang.visual-basic
Titolo: InnoSetup e installazione multiutente

Ciao a tutti
ho già postato questa domanda in passato ma non ho ricevuto una risposta.
Ora ci riprovo.
Utilizzo da anni InnoSetup per realizzare i pacchetti di installazione delle 
mie applicazioni.
Ora mi trovo a risolvere il seguente problema:
Ho un pc con diversi utenti, alcuni dei quali amministratori, altri sono 
utenti limitati.
L'applicazione deve essere installata esclusivamente dall'amministratore ma 
l'installaer deve copiare alcuni file nelle cartelle: 
c:\Documents&Setting/NomeUtente1/DatiApplicazione/NomeApplicazione
c:\Documents&Setting/NomeUtente2/DatiApplicazione/NomeApplicazione
c:\Documents&Setting/NomeUtente3/DatiApplicazione/NomeApplicazione
....
Insomma nelle cartelle di tutti gli  utenti.
E' possibile eseguendo l'installazione un'unica volta?
Voi altrimenti come fate?
Grazie anticipatamente. 

 Voi altrimenti come fate?
Di norma i programmi, lo stesso 
vb.net
, mi pare che creino le cartelle al
primo avvio del programma su quell'utente, non so se copiandole da AllUser
o forse da DefaultUser, dove l'installer ha copiato la roba.

 o forse da DefaultUser, dove l'installer ha copiato la roba.
Intanto grazie per la risposta...
ho pensato anch'io ad una copia da programma, ma mi sembra una soluzione un 
po' contorta.
Ho notato che ci sono degli installer che chiedono se installare il 
programma su tutti gli utenti o solo sull'utente corrente. Io vorrei poter 
fare la stessa cosa, ma non saprei come...
spero in un vostro aiuto... 

 spero in un vostro aiuto...
Non credo comunque che si mettano a scansionare gli utenti, anche perchč i
profili io gli posso avere anche su active directory, e lě non ci scrive
neanche l'administrator.

 neanche l'administrator.
Mi sembra strano non si possa fare, mi sembra un problema comune, o forse 
sbaglio procedura...
Se faccio copiare i file alla mia applicazione  ho due opzioni:
1. Ogni volta che l'applicazione viene avviata esegue la copia da AllUser 
alla cartella Utente rallentando perň l'applicazione
2. La copia viene eseguita solo al primio avvio, in questo caso perň nel 
momento in cui eseguo un aggiornamento la copia non viene eseguita e quindi 
l'utente si trova che dei file obsoleti.
Spero di essermi spiegato...
Spero in un vostro aiuto... ma voi come fate?
Possibile non abbiate mai avuto questo problema?
Dove mettete i file che l'applicazione deve poter modificare liberamente?
Esiste una cartella con diritti di lettura/scrittura comune a tutti gli 
utenti?
Grazie anticipatamente 

 Grazie anticipatamente
Pensiero laterale:
scusa eh...indipendentemente da quello che fa il setup
Prima volta che lanci l'applicazione?
Esecuzione di aggiornamento?
Controllo coerenza installazione?
Routine "chekkati_il_file"
copia in app.path o quello che vuoi i file(s) che desideri!
Falla fare al programma la fatica di tenere aggiornate le cartelle dei
singoli utenti!
oppure....
fai come admin una cartella comune a tutti!
Tanto se la cartella è cmq comune  non ha molto senso ricopiare il
medesimo file in posti diversi....casomai rendila comune solo agli
utenti loggati nel pc locale!
...ma è cmq cura dell'admin...non del setup!
e cmq quella comune è la dir alluser
Strana esigenza!

Strana esigenza!
Innanzitutto ti ringrazio per la disponibilità....
Se ti sembra una strana esigenza vuol dire che stò sbagliando da qualche 
parte: tutti i miei software hanno questa esigenza, quindi per me non è un 
caso sporadico ed a dire il vero penso che l'esigenza sia comune ad altri 
programmatori.
Immaginiamo di avere una semplice applicazione che dialaga con un database 
MDB ed ha necessità di essere configurata dall'utente.
Quindi io seguo questa strada (forse sbagliata): copio il file EXE nella 
cartella "c:\programmi\nomeapplicazione" ed il database (che ovviamente deve 
essere modificabile) ed il file "personalizza.dat" all'interno delle 
cartelle:
c:\Documents&Setting/NomeUtente1/DatiApplicazione/NomeApplicazione
c:\Documents&Setting/NomeUtente2/DatiApplicazione/NomeApplicazione
c:\Documents&Setting/NomeUtente3/DatiApplicazione/NomeApplicazione
....
In WinVISTA ma nche in WinXP se l'utente è limitato, nella cartella 
"c:\programmi\nomeapplicazione" non vi è possibilità di scrittura altrimenti 
avrei messo tutto qui dentro.
L'applicazione deve andare in mano a degli utonti e quindi non è 
immaginabile dergli crea un cartella, dagli i diritti di amministratore ecc. 
ecc.
L'installar o l'applicazione dovrebbe poter far tutto in automatico.
Ora detto questo penso sia una esigenza comune, ma probabilmente io da 
neofita seguo una strada sbagliata.
Qual è la strada giusta? quella come mi hai già detto? di far copiare i file 
dal programma e verificarli uno ad uno in caso di upgrade?
Se così è, speravo in qualcosa di più semplice.
Grazie anticipatamente.
 


IMHO è una fonte di problemi IMMANE!!!!!!!
IL DATABASE è l'unica cosa che rimane UGUALE!
è il programma che viene personalizzato!
Quindi.....
Access.MDB in un dir COMUNE...casomai limitata a SOLTANTO gli utenti
loggati....
e programma personalizzato!
Abbi pazienza.....
Utente delle 10.00
user Ugo pw ugo
carica fatture.mdb
inserisce...i dati della fattura 12 ...e sono quelli del cliente
Alvaro spa
poi il capoufficio lo chiama fuori per una commissione...e non
riaccende il pc!
Utente delle 17.30
user Paola pw paola
carica fatture.mdb....
è rimasto del lavoro arretrato....
inserisce i dati della fattura 12....e sono quelli del cliente Sonben
s.a.s
e li stampa e li manda via per posta
il giorno dopo
ore 9.30
User ugo pw ugo....
cosa dovevo fare?
Stampare la fattura 12?....
si bene...stampo la fattura 12 di Alvaro spa e la invio per posta!
Ci sarà(secondo te) un perchè i DB "seri" vengono installati su una
macchina dedicata ....visibile in rete ....e hanno in genere una
gestione integrata delle identità?
Pensa che casini avere 5 db IDENTICI per 5 utenti diversi!!!!
Hai un unico DB....e la gestione di 5 identità....così va bene!
Access ha funzionalità grezze rispetto a mysql o sqlserver....ma
utenti e ruoli li ha pure lui!!!

 wrote:
puo darsi che abbia capito male
Io farei cmq una procedura di start che esegue i setup nelle cartelle
locali di ogni utente!
La prima volta che un utente usa il sw dopo averlo installato compie i
vari setup automatici!
E' utile anche quando vuoi afggiornare qualcosa....o quando vuoi
riportare al default una applicazione!
D'altronde se hai installato un sw....ma un utente non lo ha mai
usato...è giusto che rimanga in "attesa di completare
l'installazione"....non è attivato ...tanto per parlare come casa M
$!!!
però via sw può esserti utile leggere...penso...
http://www.c-sharpcorner.com/Articles/ArticleListing.aspx?SectionID=1&SubSectionID=1
...io ho sempre fatto scatenare una routine di "attivazione" ad ogni
"primo avvio"!

utenti e ruoli li ha pure lui!!!
Hai ragione, ho fatto un esempio sbagliato! effettivamente quando mi trovo 
ad avere un database lo inserisco su un disco accessibile della rete :-)
Ma rimaniamo al problema dei file di personalizzazione, se l'applicazione è 
"grossa" potrebbero essere anche centinaia di file da copiare!

"primo avvio"!
Ok, volevo evitarlo per il  motivo che l'applicazione che ho realizzato in 
realtà si interfaccia con AutoCAD e quindi non ha una sua "icona" che 
l'utente clicca. Semplicemente aprendo AutoCAD si trova il plug già bello 
che installato.
Ma ovviamente questo non è un problema di VB e quindi sono OT in questo NG.
Mi sà che se questa è l'unica strada sarò costretto a inserire un'icona nel 
desktop per ogni utente con scritto "Attiva NomeProgramma"
Ancora grazie! almeno adesso ho capito qual è la procedura e mi comporterò 
di conseguenza.
Ma perchè AllUser è di sola lettura!!?? qual è il senso di questa cosa?
Ciao 

 Hai un unico DB....e la gestione di 5 identitŕ....cosě va bene!
Bisogna vedere che programma č.
Se č un programma per catalogare es. i propri film, č corretto imho che sia
legato all'utente. Se č un programmino per gestire le entrate/uscite
uguale. Oppure se č un programma che permette di catalogare varie cose
aprendo piů database.
Io lo metterei comunque in \Documenti comunque, dato che č una cartella piů
backuppabile.

 backuppabile.
1. Non mi piace quando alcuni software "sporcano" la mia bella cartella 
Documenti, tutta ordinata con fatica
2. Possibile non esista un'altra cartella di sistema accessibile in lettura 
e scrittura da tutti gli utenti? A mio avviso č una carenza di Windows!
Ciao e grazie 

 e scrittura da tutti gli utenti? A mio avviso è una carenza di Windows!
Non è una carenza, è un'ottima cosa. Con InnoSetup *mi pare* di aver
tentato di creare una cartella dandogli everyone, ma mi dava qualche
problema, o almeno mi pare.
http://www.innosetup.com/isfaq.php#perms
E te lo dice uno che ha i programmi che oramai scrivono in app.path ed è
costretto a dare accesso "everyone full-control" alla cartella. Quando sarà
il momento sposterò i vari .ini e simili da altra parte. Per ora il
giochino funziona pure su Vista64 quindi...

 giochino funziona pure su Vista64 quindi...
Io mi sono imbattuto in questo problema qnel passaggio da Win98 e WinXP e 
gli utenti limitati.
Per questo motivo anni fà ho decisono di fare le cose come si dovrebbe, ma 
effettivamente le complicazioni non sono poche. Dal punto di vista 
dell'ordine e della programmazione sarebbe molto più semplice mettere tutto 
su Programmi.
Ciao

 su Programmi.
Anche per l'utente è molto più semplice. Reinstalli il software e
ri-travasi la cartella backuppata. Però comodo non vuol dire corretto :)
Per quanto riguarda i programmi, se sono fatti con criterio dall'inizio non
vedo grossi problemi, invece di scrivere App.Path "\File.ini" si usa
un'altra variabile e amen. Il problema è andare a caccia nelle procedure di
file temporanei/configurazione al volo, salvati in app.path  o in sue
sottocartelle.
E poi i clienti col programma funzionante convertirli al nuovo metodo, e
non sarà MAI indolore :)
 

 non sarà MAI indolore :)
E' quello che stò cercando di fare.
Ciao e grazie 

 ricreare da zero!
Questo è vero. Personalmente quando creo un file nuovo che non si trova nel
pacchetto di installazione, lo faccio creare a runtime con i valori di
default, poi da lì viene letto e aggiornato con le opzioni che si vogliono.
Per te di che file si tratta? Sono file ini? Sono file esterni?
Se metti tutto in \programmi, in lettura dovresti poterci accedere. Poi da
codice dovrai gestire appunto la copia delle impostazioni se non trovi
niente.
Se poi mandi un aggiornamento ti devi domandare: "le impostazioni locali
devono essere azzerate o mantenute quelle dell'utente?"
Nel primo caso da codice devi gestire la creazione dei nuovi file con le
opzioni personalizzate, nel secondo ti setti un file di flag per
sovrascrivere le impostazioni.

 ricreare da zero!
Perchè non inserisci nel tuo programma in un file di Risorse dei file di 
configurazione standard?
Se non sono presenti tali file all'avvio dell'applicazione, li copi e magari 
avverti l'utente con un MsgBox.
-- 
Ciao Fede
By Chicco Production
http://bcp.freetools.it

 Voi altrimenti come fate?
Usa la "Document and Settings\All Users".
Sotto Vista la cartella è "Users\All Users"
Goglando troverai qualcosa.
Nicola

 Sotto Vista la cartella è "Users\All Users"
Si, ma tale cartella per gli utenti limitati è di "sola lettura" sia in 
WinXP che in WINVISTA!
Comunque grazie! 

 WinXP che in WINVISTA!
E ci mancherebbe che non lo fosse.
Infatti tu installi da account admin e là dentro metti i file comuni a 
tutti gli utenti.
Poi all'avvio del programma i file vengono copiati nella cartella 
dell'utente.
Nicola