Contexte
J'ai écrit une petite application C#/.NET 4.0 qui synchronise divers paramètres d'un jeu installé dans Program Files vers d'autres copies du même jeu sur différentes machines (pensez à la synchronisation des favoris de Chrome, mais pour ce jeu). La synchronisation en elle-même est une affaire relativement simple, traitant des fichiers stockés à l'intérieur du dossier Program Files du jeu.
Sur ma machine, cela fonctionne bien sans avoir à élever mon application via UAC. Windows 7 fait utiliser la virtualisation de Program Files pour le jeu et mon application fonctionne bien avec cela.
Cependant, sur beaucoup de machines de testeurs, je reçois des rapports indiquant que l'application ne peut pas fonctionner avec les fichiers et dans certains cas, elle ne peut même pas voir le dossier du jeu ! Demander à l'utilisateur de cliquer avec le bouton droit et de "Exécuter en tant qu'administrateur" résout le problème dans tous les cas.
Donc, il suffit de définir le manifeste de l'application pour exiger des privilèges d'administrateur, n'est-ce pas ? C'est bien (bien que pas idéal) lorsque l'utilisateur invoque manuellement l'application ou le processus de synchronisation car ils interagiront avec l'application et seront prêts à accepter une demande UAC.
Cependant, l'une des fonctionnalités de mon application est une option "Synchroniser automatiquement", qui permet à l'utilisateur de "configurer et oublier" l'application. Avec cette option activée, l'application se place dans le registre à HKCU\Software\Microsoft\Windows\CurrentVersion\Run pour être exécutée au démarrage et se place dans la barre d'état système pour synchroniser les paramètres en arrière-plan au besoin.
De toute évidence, je dois être plus intelligent ici. Présenter une invite UAC dès que l'utilisateur se connecte à son compte ou à des intervalles aléatoires par la suite n'est pas la voie à suivre.
Donc, ma question !
Quelle est la meilleure façon d'aborder une situation où j'aurais besoin d'exécuter une application au démarrage nécessitant des privilèges d'administrateur ? Existe-t-il un moyen de faire autoriser à l'utilisateur une installation qui fait que le système exécute automatiquement l'application avec les bons privilèges sans demande au démarrage/connexion ?
Mise à jour Juste pour être clair, cela doit être réalisable en code.