2017-09-23 3 views
1

Mon application VB.NET doit stocker un fichier texte sur une machine locale. Chaque fois que l'application démarre, elle doit écrire des informations dans ce fichier texte, quel que soit l'utilisateur de la machine.Où placer des données utilisateur communes sans droit administratif?

1) Le registre est hors d'option. L'utilisateur n'a pas d'accès en écriture à HKEY_LOCAL_MACHINE \ Software. HKEY_CURRENT_USER \ Software n'est pas préféré car les utilisateurs doivent fournir une clé de déverrouillage de licence chaque fois qu'ils ouvrent l'application pour la première fois. Je veux seulement que la clé de déverrouillage de licence soit fournie une fois après son installation par n'importe quel utilisateur. La clé de déverrouillage de licence sera écrite dans le fichier texte.

2) J'ai essayé Environment.SpecialFolder.CommonApplicationData et créé un dossier pour stocker le fichier texte. Cela fonctionne bien quand l'administrateur l'installe et l'administrateur peut ouvrir l'application. Une fois que l'utilisateur se connecte sur la même machine, l'application parvient à afficher l'écran de démarrage, mais il cesse de fonctionner. Aucun message d'erreur n'apparaît et il disparaît dans l'onglet Détails du Gestionnaire des tâches. Je peux toujours voir le fichier texte dans Environment.SpecialFolder.CommonApplicationData.

3) J'ai vérifié other question liés à ce problème avant. L'un des commentaires suggère Isolated Storage. Cependant, je ne suis pas sûr si j'obtiendrai le même résultat que (2) ci-dessus quand j'utilise le stockage isolé.

Questions:

1) Où devrait le fichier de licence être stocké dans une machine locale, qui est commune à tous les utilisateurs et tous les utilisateurs doivent avoir écriture, un accès en lecture à ce fichier de licence?

+0

Si la clé de licence est écrite au moment de l'installation (avec les droits d'administrateur), tout utilisateur devrait être capable de * lire * depuis "CommonApplicationData" sans problème. Vous pouvez également l'enregistrer dans un dossier public car il n'est pas dans leur intérêt de le supprimer – Plutonix

+0

'CommonApplicationData' est le bon endroit et bien que vous puissiez * changer * les autorisations lors de la première création du fichier, vous ne devriez pas faire le fichier monde inscriptible sauf si vous en avez vraiment besoin. Vous avez probablement juste besoin de réparer le bogue qui provoque le crash de l'application, la cause la plus probable est de demander par inadvertance un accès en écriture lors de l'ouverture du fichier. –

+0

@HarryJohnston, l'application doit _write_ le fichier texte à chaque démarrage. Ainsi, CommonApplicationData est-il le bon endroit pour que mon application lise et écrive le fichier texte chaque fois qu'un utilisateur se connecte et démarre mon application? – hunterex

Répondre

0

D'autres considérations mis à part, CommonApplicationData est toujours le bon endroit pour ce fichier. Lorsque votre installateur crée initialement le fichier, have it set permissions permet à INTERACTIVE d'y écrire. Idéalement, vous ne devez accorder que l'autorisation FILE_GENERIC_WRITE afin que les utilisateurs non administrateurs ne puissent pas supprimer le fichier ou modifier à nouveau les autorisations.