2010-04-14 8 views
2

J'ai une application .NET WPF de bureau qui utilise une base de données intégrée (SQLite). Où mettre le fichier de base de données? C'est la même base de données pour tous les utilisateurs.Dossier enregistrable par tous les utilisateurs sur le même pc

J'ai essayé d'utiliser CommonAppData mais il n'est pas accessible en écriture pour les utilisateurs non-administrateurs. J'ai donc essayé d'utiliser une action d'installation personnalisée pour donner des droits d'écriture à tous les utilisateurs de ce dossier mais cela échoue sur les PC de domaine. Le code est:

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MyAppName"); 

DirectorySecurity security = Directory.GetAccessControl(appDataPath); 
FileSystemAccessRule rule = new FileSystemAccessRule("Users", FileSystemRights.WriteData, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow); 
security.AddAccessRule(rule); 
Directory.SetAccessControl(appDataPath, security); 

Est-ce que les utilisateurs ". \ Users" de "Users" travailleraient sur un domaine?

Est-ce la meilleure approche? Y a-t-il un autre dossier que je pourrais utiliser?

+0

Je ne suis pas dans la programmation Windows mais n'y a-t-il pas un dossier partagé public, au moins dans Windows Vista et au-dessus? –

Répondre

2

Aucun dossier ne peut être utilisé par défaut. Vous devez ajuster la liste de contrôle d'accès d'un répertoire, sinon le droit par défaut n'inclura que l'accès en lecture pour les utilisateurs autres que les fichiers Propriétaire (créateur). En règle générale, vous avez tous les droits sur les répertoires que vous créez vous-même: mon approche consistait à créer un sous-dossier d'application dans le dossier ProgramData, puis, en tant que propriétaire (via la création) du nouvel objet, cela et pourrait ajouter mon accès à tous les utilisateurs en tant qu'entrée de contrôle d'accès héritable à cela.

J'ai également rencontré des problèmes avec les "Utilisateurs" utilisant l'API Windows et j'ai dû passer à l'aide d'un sid bien connu. Testé sur un système allemand au moins la chaîne "Users" était entièrement différente.

+1

Merci, j'ai utilisé ce SID pour modifier les droits du dossier: new SecurityIdentifier (WellKnownSidType.AuthenticatedUserSid, null); –

+0

Pouvez-vous s'il vous plaît écrire un exemple de code, cela aidera à comprendre la littérature. –

Questions connexes