J'ai une application C # qui crée un fichier de paramètres pour lui-même pour stocker l'état actuel de certains éléments visuels. Cette application fonctionne simplement bien sur n'importe quelle machine qui ne tourne pas Windows 7, mais sur ces machines, nous obtenons une erreur que le fichier de paramètres ne peut pas être créé car l'utilisateur n'a pas la permission. Maintenant, je pouvais résoudre ce problème en allant à chaque ordinateur, vous connectant en tant qu'administrateur et en donnant l'accès à l'utilisateur et en écriture sur le dossier de programme de l'application que nous avons installée, mais il doit y avoir une meilleure façon. p>
Cela semble être dans XP, vous avez un accès en écriture sur les dossiers que vous avez créés par défaut, mais ce n'est plus le cas. Y a-t-il un paramètre dont j'ai besoin dans le paquet de configuration pour faire ce travail? P>
8 Réponses :
essayez-vous de créer des fichiers dans le dossier d'installation? Vous devez utiliser le dossier de données utilisateur pour les données et non les dossiers d'installation. Utilisez le dossier CODE> Environment.SPECIALFLDIDS.ApplicationData CODE> pour obtenir un dossier que vous pouvez écrire à. P>
Le point est que vous ne devriez pas stocker les fichiers de paramètres dans le dossier de programme. Microsoft a informé cela pendant une longue période, mais a commencé à rendre les choses plus strictes avec Vista IIRC. P>
Utilisez Environnement.Specialfolders.ApplicationData Code> (etc) pour trouver le lieu le plus approprié pour mettre les paramètres. Ou utilisez l'infrastructure de paramètres .NET qui le fait automatiquement pour vous. P>
Merci, je savais que je faisais quelque chose de fondamentalement faux. Je stocke des données dans le dossier de programme depuis des années et je suis juste une force d'habitude. J'ai changé de création de mon propre dossier dans les données d'application et que tout fonctionne bien.
Vous courez probablement en tant qu'administrateur sur votre machine non-Windows 7 qui écrit n'importe où. Assurez-vous de sauvegarder toutes les données d'instance utilisateur dans leur dossier Appdata (itinérance si elle devrait les suivre d'un ordinateur à un ordinateur ou local si son cache ou local à la machine TAHT uniquement). Si vous devez partager les paramètres entre les utilisateurs, utilisez le dossier C: \ programdata avec les autorisations appropriées. P>
Un programme ne devrait pas essayer de stocker les paramètres dans son répertoire d'installation. P>
Assurez-vous d'utiliser Environnement.GetFolderPath Pour obtenir les bons emplacements nécessaires. Vous ne devriez jamais faire des chemins de code difficiles, car ils peuvent être différents entre versions et langues. (Je sais dans la version allemande de XP, il n'était pas fichiers de programme code> mais
programme code>!) P>
Il s'agit d'une faille de sécurité dans votre programme car votre programme écrit des informations sur le répertoire de programme (qui est et devrait être protégée.) Si c'est une situation de correction de la cause fondamentale, envisagez d'utiliser le Enumération SPECIALER ou les membres statiques sur Application aime comme CommonAppDataPath Pour écrire vos informations à un endroit plus approprié. p>
Assumer l'approche typique de l'écriture d'un fichier via un chemin, il s'agit d'une solution triviale et il n'ya pas de bonne raison de "opportunité" de ne pas corriger la cause première. Si vous n'êtes pas sûr de savoir comment manipuler le chemin, envisagez d'utiliser chemin.combine () . Il le fait pour vous. P>
En général, vous ne devriez pas écrire des données de programme dans n'importe quel dossier sous les fichiers de programme (même si vous avez créé le dossier). Vous devez utiliser Environnement.GetFolderPath (...) Code >
pour déterminer où mettre vos données spécifiques à votre application. Vous pouvez passer dans l'une des nombreuses Enums définies ici - Vous voulez probablement enviontment.specialfolder.commonapplicationData code> p>
Cette application fonctionne très bien sur n'importe quelle machine qui ne tourne pas Windows 7 p> blockQuote>
faux! Cela ne fonctionne que sur ces machines si vous exécutez l'administrateur em>. Je pense que votre programme sera également cassé sur Windows XP si vous essayez de l'exécuter sur n'importe quel ordinateur d'entreprise plutôt qu'à un ordinateur à domicile. P>
Au lieu de cela, ce type d'information doit aller dans l'un des dossiers de données d'application spéciaux. P>
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
Je ne vois pas comment tout est une réponse aculman. Je dois pouvoir écrire un rapport et avoir enregistré le dossier Documents de l'utilisateur le même dossier que j'ai utilisé pour lire les fichiers XML que je répète le rapport de. p>
Alors tu as écrit une réponse i> juste pour dire ça? Veuillez utiliser des commentaires ou poser une nouvelle question (oui, vous ne pouvez toujours pas accéder aux commentaires, vous devrez fournir des réponses réelles ou poser d'abord de bonnes questions afin de gagner un représentant)
Avez-vous vérifié que votre package d'installation marque le répertoire des paramètres enrichi et l'attribuant à l'utilisateur droit?
Vous ne dites pas où vous créez des fichiers, ce qui pourrait être des informations utiles