La Vitualisation des fichier sous Windows 7 et Vista
L'UAC de Windows 7 et Vista renforce la sécurité du système. Sur le principe, rien à dire. Mais dans les fait, cela se complique quand le fonctionnement n'est pas celui que l'on en attend.
Essayez de placer des fichiers de données dans le répertoire "ProgramData" prévu à cet effet et vous découvrirez que Windows décidera peut être de virtualiser vos fichiers ! En d'autres termes, il en fera une copie dans le dossier "VirtualStore". Cela peut ne pas poser de problème sauf si vous décidez de mettre à jour les fichiers par exemple. Là, vous découvrirez très probablement que les fichiers Visualisés ne sont pas actualisés, seul l'original l'est ! Vous aurez beau essayer de forcer cette actualisation, rien ni fera car le répertoire VirtualStore est géré directement et seulement par Windows.
Une des solutions pour résoudre le problème, les Manifestes de Windows mais ils ne sont pas sans imposer quelques contraintes (droits limités, demande de confirmation de lancement d'application...). Personnellement, je n'opte pas pour cela.
Autre solution, composer avec les contraintes et les libertés que vous accorde Windows. A l'installation de l'application, stockez les fichiers de données dans un répertoire dédié à la racine de "C:" (vous pouvez le rendre invisible pour éviter les mauvaises manipulation de l'utilisateur). Ensuite, dans le code d'initialisation de votre application, utilisez la fonction "Hchangerep" pour rediriger l'application vers le répertoire en question. Et voilà, plus de problèmes de Virtualisation des fichiers de données, plus de problèmes de droits et pas besoin de manifeste.
Cette solution n'est pas idéal car elle oblige à ne pas utiliser le répertoire ProgramData de Windows mais Pcsoft n'étant pas en mesure de me fournir une explication qui tienne la route, il faut bien trouver une autre solution propre.
A disposition.
lololebricoleur
Résultats de mes derniers tests...
J'ai utilisé fRepDonnéesCommun() comme chemin de stockage de mes fichiers de données.
Sous Windows 7 et Vista, fRepDonnéesCommun() correspond au répertoire ProgramData présent à la racine du disque système.
Après installation, mes fichiers de données sont installés au bon endroit.
Au lancement de l'application, j'utilise la fonction "ChangeRep" pour diriger l'application vers fRepDonnéesCommun().
Résultat :
Dès que j'apporte une modification à un des fichier de données, il est automatiquement dupliqué par Windows dans le VirtualStore !
Conclusion, j'en suis toujours au même point et j'ai toujours le même soucis.