View Full Version : [C#] Programma multiutente
vorrei realizzare in C# un programma .NET che preveda la possibilità della multiutenza. in sostenza questo programma tra le altre cose dovrebbe memorizzare dei files, ma tali files devono essere unici per ogni utente, non su tutto il sistema: lo stesso programma avviato da un altro utente deve leggere files di impostazioni diversi.
in Win32 c'è ad esempio l'API SHGetKnownFolderPath (http://msdn.microsoft.com/en-us/library/bb762188(VS.85).aspx) col parametro FOLDERID_LocalAppData, in .NET invece avete idea di come posso fare?
Oceans11
19-10-2008, 10:24
vorrei realizzare in C# un programma .NET che preveda la possibilità della multiutenza. in sostenza questo programma tra le altre cose dovrebbe memorizzare dei files, ma tali files devono essere unici per ogni utente, non su tutto il sistema: lo stesso programma avviato da un altro utente deve leggere files di impostazioni diversi.
in Win32 c'è ad esempio l'API SHGetKnownFolderPath (http://msdn.microsoft.com/en-us/library/bb762188(VS.85).aspx) col parametro FOLDERID_LocalAppData, in .NET invece avete idea di come posso fare?
Se ho capito bene ti serve il path della user home.
Se è così allora ciò di cui hai bisogno sono:
ApplicationData -> "C:\Documents and Settings\<utentecorrente>\Dati applicazioni\"
oppure
LocalApplicationData -> "C:\Documents and Settings\<utentecorrente>\Impostazioni locali\Dati applicazioni\"
anzichè
CommonApplicationData -> "C:\Documents and Settings\All Users\Dati applicazioni\"
Che sono una enumerazione di Environment.SpecialFolder:
String specialFolder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
Console.WriteLine("GetFolderPath: {0}", specialFolder);
Oppure su in realta' ti basta che il file di configurazione sia diverso per ciascun user, ma senza necessariamente sparpagliarlo in giro per la macchina, puoi creare i file chiamati p.es.
Data.UserName.xml
Pippo.UserName.conf
Dove lo UserName lo trovi sempre sotto
Environment.UserName;
(Oppure folder separati per ciascun utente ma creati nello stesso spazio eseguibile...)
Se non ci sono requisti di sicurezza tendenzialmente propendo per fare cosi', in modo tale per cui la disinstallazione e' sempre la classica rimozione della cartella, senza dover andare in giro a rincorrere file sparsi (o registri, bleah)
grazie ad entrambi; quello che mi mancava era la classe Environment, l'esempio di Oceans11 è perfettissimo per il mio scopo.
@gugoXX: preferisco sparpagliare per la macchina :D
il programma, specialmente in Vista poi, potrebbe non avere i permessi di scrittura sulla cartella in cui è installato, quale doverosa misura di sicurezza. per la disinstallazione, probabilmente scriverò anche un installer basato su Windows Installer.
edit - anche perché ora non ho voglia di controllare ma temo che in Windows due utenti possano anche avere lo stesso nome; è il SID che li identifica univocamente, non il nome.
SnakePlissken
19-10-2008, 20:53
Prova a dare un'occhiata agli user settings e application settings:
http://msdn.microsoft.com/en-us/library/bb397750.aspx
http://msdn.microsoft.com/en-us/library/0zszyc6e.aspx
Consentono di automatizzare la lettura da disco all'avvio del programma e il salvataggio all'uscita del prog di un gran numero di oggetti (string, size, point, collection... insomma tutti i tipi che sono serializzabili su file XML).
There are two types of application settings, based on scope:
Application-scoped settings can be used for information such as a URL for a Web service or a database connection string. These values are associated with the application. Therefore, users cannot change them at run time.
User-scoped settings can be used for information such as persisting the last position of a form or a font preference. Users can change these values at run time.
You can change the type of a setting by using the Scope property.
The project system stores application settings in two XML files: an app.config file, which is created at design time when you create the first application setting; and a user.config file, which is created at run time when the user who runs the application changes the value of any user setting. Notice that changes in user settings are not written to disk unless the application specifically calls a method to do this.
Ovviamente gli user-scoped settings sono automaticamente memorizzati in una cartella dell'utente.
Se usi il Visual Studio, puoi andare a Project/Properties/Settings e li definisci da lì.
:)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.