La solution la plus évidente consiste à créer un service disposant des droits d'écriture sur le dossier, de manière à ce qu'il puisse agir en tant que "courtier" pour les demandes d'écriture dans le dossier. Votre processus ressemblerait alors à ceci :
- [PROGRAM] Crée le rapport dans le chemin des fichiers temporaires
- [PROGRAM] Informe [SERVICE] que le rapport X est disponible dans le chemin des fichiers temporaires.
- [SERVICE] Copie le rapport X depuis le chemin des fichiers temporaires vers un emplacement restreint approprié.
- [SERVICE] Informe [PROGRAM] que la sortie a été copiée.
- [PROGRAM] Accéder à la sortie de l'emplacement restreint.
Il est assez courant aujourd'hui de disposer d'un processus de courtage distinct qui sert de médiateur pour l'accès aux emplacements restreints. C'est l'une des techniques employées par Internet Explorer, entre autres, pour lui permettre de fonctionner avec l'UAC et l'accès restreint au système de fichiers par défaut.
Vous pouvez coder votre service de courtage de manière à ce qu'il n'autorise (c'est-à-dire qu'il expose une API), par exemple, que la création de nouveaux fichiers dans l'emplacement restreint, empêchant ainsi la suppression ou l'écrasement des données historiques et supprimant la nécessité de donner aux utilisateurs standard autre chose qu'un accès en lecture à l'emplacement restreint.
Une autre approche, qui serait largement similaire mais qui éviterait d'avoir à écrire un service Windows, consisterait à créer une tâche programmée configurée pour s'exécuter sous l'"utilisateur élevé" qui effectue les actions des étapes 1 à 5, mais à la configurer pour qu'elle soit exécutée à la demande (plutôt que selon un calendrier) par l'application (I penser c'est possible, mais je n'en suis pas sûr à 100 %).