2010-07-30 21 views
1

J'ai un programme installé dans ProgramData. J'utilise UAB 2.1 pour mettre à jour l'application mais elle a échoué parce que l'accès au chemin est refusé (OK avec les fichiers texte, donc je pense qu'il y a un problème avec l'UAC). Comment puis-je obtenir des droits d'écrasement dans ProgramData/MyAppFolder ou afficher une boîte de dialogue pour remarquer que l'utilisateur donne des droits d'écrasement pour le programme de mise à jour?UnauthorizedAccessException avec System.IO.File.InternalCopy dans ProgramData sous Windows 7

Merci beaucoup à l'avance.

Mise à jour

J'ai lu un article à http://blogs.msdn.com/b/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx. Il a dit que Vous voudrez créer votre répertoire et définir les ACL dont vous avez besoin au moment de l'installation. Dois-je changer le dossier d'installation en LocalAppData ou essayer de définir les ACL au moment de l'installation selon l'article.

Répondre

1

Les applications qui se mettent à jour ont de la difficulté avec UAC. Votre meilleur pari est de partitionner le code qui fait la mise à jour dans un exe séparé. Mettez un manifeste avec requireAdministrator sur cet exe. Dans l'application principale, laissez le code qui vérifie les mises à jour et activez-le pour activer un bouton ou un élément de menu lorsqu'une mise à jour est nécessaire. Mettez un bouclier sur ce bouton ou cet élément de menu et lancez l'exe séparé avec ShellExecute. L'utilisateur obtiendra une boîte de dialogue de consentement UAC, qu'ils attendront à cause du bouclier. L'exe séparé, parce qu'il est élevé, sera en mesure d'écrire dans Program Files et dans d'autres zones protégées.

+0

Merci d'avoir répondu. J'ai compris votre solution, mais encore quelque chose doit considérer: 1> Je pense que l'exe séparé avec le dialogue de consentement de l'UAC n'a pas une bonne expérience utilisateur. Comment pourrais-je modifier le dialogue de consentement de l'UAC pour montrer une explication claire. 2> Dans le cas où mes utilisateurs utilisent uniquement le programme avec un compte standard. Dois-je changer le dossier d'installation en LocalAppData ou essayer de définir les ACL au moment de l'installation. Merci. –

+1

Vous ne pouvez pas modifier la boîte de dialogue UAC. Vous pouvez cependant leur en donner un à l'avance. Donc, quand une mise à jour est disponible, donnez-leur une boîte de message "Une mise à jour est disponible.Pour l'installer cliquez sur le bouton Mettre à jour.Vous devrez consentir à la boîte de dialogue [le décrire d'une manière qu'ils comprendront]." La signature de votre application peut rendre le dialogue UAC plus agréable pour eux car il ne dira pas Unknown Publisher et aura la barre orange effrayante en haut. L'installation de votre application en dehors de ProgramFiles rend vos utilisateurs vulnérables aux logiciels malveillants. Je ne le recommanderais pas. –

+0

Merci beaucoup. –