Je dois stocker des fichiers dans le bureau commun sous Windows. L'application est une application très spéciale pour exactement un PC spécial (préparation du périphérique), il fallait donc être facile pour les utilisateurs non techniciens de trouver et de modifier le fichier de configuration. Maintenant, nous sommes passés à un domaine et, car différentes personnes (avec des comptes différents) doivent utiliser le logiciel, il doit être dans un lieu commun, vu par chaque utilisateur. Alors s'il vous plaît ne demandez pas pourquoi c'est sur le bureau;) p>
précédemment, je viens d'utiliser environnement.gefolderpath (environnement.specialfolder.desktop) code>. Il existe plusieurs dossiers communs dans le
Specialfolder Code> énumération, mais le bureau commun semble ne pas être là. Est-ce que je manque quelque chose ou dois-je p / invoquer
shgetspecialfolderPath code> avec
csidl_common_desktopdirectory code>? p>
5 Réponses :
Je pense que vous devez utiliser le afin que vous puissiez facilement copier et adapter la pièce dont vous avez besoin ... P> < / p> shgetspecialfolderPath code> API, car il n'y a pas de valeur ENUM pour "CommonesktopDirectory". Vous ne pouvez pas utiliser explicitement la valeur de
csidl_common_desktopdirectory code> et le jeter en
environnement.pecialfolder code>, car la méthode
getfeuderpath code> vérifie que la valeur est définie dans la valeur. l'énum. Voici le code de la méthode
getfolderpath code> (à partir du réflecteur):
Ok, je voulais juste être sûr. Maintenant que j'ai examiné les documents MSDN, vous devez noter qu'en Vista et plus tard, vous devez utiliser connu unfolderid au lieu de valeurs CLSID. Est-ce que cela s'applique également si mon application doit fonctionner sur XP?
Non, je pense que c'est pour Vista seulement
Je vais probablement aller avec un autre dossier (voir mes commentaires à la question), mais c'est la meilleure réponse à la question, alors je l'ai acceptée. Merci pour votre réponse rapide.
Pour clarification - Par des postes de travail commun, vous voulez dire C: \ Documents et paramètres \ Tous les utilisateurs \ Desktop?
Si oui, il s'agit d'un piratage laid - p>
Oui, je veux dire ça. Mais c'est vraiment à laid.
Il va se casser dès que certains systèmes utilisent un autre nom pour le bureau: P
Vous pouvez utiliser l'hôte de script Windows - Wshshell.Specialfolders P>
http://msdn.microsoft.com/ EN-US / Bibliothèque / 0A7B5XE (vs.85) .aspx P>
Merci pour l'idée, mais je préférerais p / invoquer que d'introduire une telle dépendance :)
Tout d'abord, ajoutez une référence à "Modèle d'objet hôte de script Windows". Vous le trouverez dans l'onglet COM de la boîte de dialogue "Ajouter des références".
using IWshRuntimeLibrary; object commonUserDesktop = "AllUsersDesktop"; WshShell shell = new WshShellClass(); string commonPath = shell.SpecialFolders.Item(ref commonUserDesktop).ToString();
Comme je l'ai écrit chez Bogdan_ch, je préfère utiliser WSH pour une telle tâche. P / invoke va bien avec moi.
Autre moyen (oui, c'est aussi laid et ne fonctionnera probablement que sur Windows XP, pas sur Vista) est de lire une valeur du registre p>
HKEY_LOCAL_MACHINE \ LOGICIEL \ Microsoft \ Windows \ Courroversion \ Explorer \ Shell Dossiers, Bureau commun P>
Ce n'est pas seulement laid, mais un cauchemar de compatibilité. Si je me souviens bien, il n'était même que dans une version du CTP de Windows, mais que des applications se sont livrées à ce sujet, elle doit être sous Windows depuis des décennies.
Maintenant, il est sale. Malheureusement, il semble que j'ai par défaut aucun droit d'écrire sur le bureau commun, ce qui le rend compliqué. Des suggestions pour un meilleur emplacement? N'oubliez pas que l'utilisateur doit pouvoir trouver le fichier et tous les utilisateurs ont besoin d'un accès en lecture / écriture. L'application doit être déployée sur XCopy.
Bien que la question initiale reste valide (surtout que cela ne semble pas être nulle part), je pense que je vais devoir aller avec des documents communs (ou quel que soit le nom des systèmes anglais). C'est toujours un peu trouvé de l'utilisateur. J'espère juste que j'espère avoir un accès en écriture. N'hésitez pas à commenter si vous pensez que c'est une bonne / mauvaise idée.
Pourquoi ne les stockez-vous pas dans un stockage isolé de la machine?
@David Brunelle: Je vais regarder, merci.
Mince. Je savais que je devrais mettre cela dans une réponse à la place. J'aurais pu obtenir un vote ...: o
@David Brunelle: Bien que cela puisse résoudre mon problème sous-jacent, ce ne serait pas une réponse correcte à cette question :)
Wow, je ne peux pas croire qu'il n'y a pas une meilleure réponse à cela!
Notez que dans .NET 4.0, le
Specialfolder Code> Enumération contient
CommoncesktopDirectory code>, qui est probablement ce que je demandais. Juste trop tard;)