Vérifiez si l’utilisateur dispose des droits d’écriture dans “Program Files”

Je dois vérifier si l’utilisateur actuel dispose d’permissions en écriture dans le dossier Program Files .
Le problème principal se produit dans Vista / 7 – Si j’essaie juste de créer un fichier temporaire à cet emplacement, je reçois une exception, même si l’utilisateur peut effectuer une telle opération avec l’Explorateur Windows (après avoir autorisé l’élévation UAC). Cela semble raisonnable, car le processus lui-même n’a pas été exécuté avec des privilèges d’administrateur.
J’ai ensuite essayé d’utiliser cette solution, mais je suis toujours revenu “vrai”, même lorsque j’ai essayé de l’exécuter avec un utilisateur standard (non-admin).

Ce que je veux éventuellement pouvoir répondre, est-ce que dans le cas où l’utilisateur essaie de créer un répertoire dans Program Files , aurait-il besoin de fournir des identifiants d’administrateur ou un simple clic sur “continuer” dans l’UAC suffirait-il?
Je cherche un moyen de répondre à cette question sans soulever moi-même le pop-up UAC. Existe-t-il un moyen facile de le faire?

METTRE À JOUR

Merci de m’avoir proposé d’utiliser le dossier UserData, mais je dois juste savoir si l’utilisateur dispose d’un access en écriture dans le dossier afin de pouvoir décider si je dois ou non effectuer une mise à jour automatique (qui exécute un msi). .

Une meilleure solution consiste à simplement stocker les données d’application là où vous êtes censé:

 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 

Il serait préférable de respecter les règles. Notez que tous les utilisateurs ne seront peut-être pas en mesure de passer à travers UAC. Et vous pourriez essayer d’écrire et cela semble réussir, mais avec Vista / Win7 «virtualiser» votre écriture ailleurs.

Depuis que vous avez marqué C # et Windows, jetez un coup d’œil à

 ssortingng dataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 

Il y a de bonnes raisons pour que l’emplacement ProgramFiles n’autorise pas l’access en écriture sans le consentement de l’utilisateur. Tu devrais soit

  1. exécutez votre application toujours élevée (demandez le consentement de l’utilisateur à chaque démarrage) ou
  2. utiliser un service de mise à jour automatique
  3. télécharger la mise à jour dans le dossier temporaire de l’utilisateur, puis exécuter la mise à jour avec l’élévation

Les options 1 et 2 présentent de sérieux inconvénients. Je recommande donc d’opter pour l’option 3. Cette méthode est également utilisée par d’autres applications (par exemple, FireFox).