2009-10-21 5 views
0

J'ai une application Windows Forms qui lit et met à jour un fichier XML avec des informations sur lesquelles un service Windows doit agir.Comment vous assurez-vous que les applications Windows et les services Windows accèdent au même ProgramData sur Win2008 x64?

Cela a fonctionné sous Windows Server 2003, XP et Vista (x32) pendant un certain temps. Maintenant, lorsque installé sur Windows Server 2008 x64, des choses étranges ont commencé à se produire, merci pour le dossier User "VirtualStore" réorientant l'arrangement de sécurité (qui, comme vous pouvez le dire, je ne comprends pas encore). L'application Windows Forms veut créer, lire et mettre à jour les fichiers dans c: \ user \ nom_utilisateur \ appdata \ local \ répertoire_virtuel \ programme_données \ nom_app, mais le service semble heureux de lire les données du fichier dans c: \ programme files \ appname ...

Le résultat est qu'ils regardent des données différentes.

Maintenant, si je mets les deux exécutables à "exécuter en tant qu'administrateur" via l'onglet propriétés/compatibilité, ce problème disparaît et le fichier dans c: \ program files \ appname est utilisé comme prévu.

Cependant, cela semble moins qu'idéale.

Comme vous pouvez probablement le dire, je ne suis pas vraiment au courant de la plupart des problèmes/facteurs à l'œuvre ici. Cette question est peut-être trop large pour répondre correctement sur Stack Overflow, mais quelqu'un peut-il pointer dans la bonne direction ou m'avertir de ce que j'ai besoin de comprendre pour que mes applications puissent fonctionner correctement dans l'environnement Win2008 x64, et continuer à travailler comme ils le font maintenant, sur XP, Vista x32 etc.

Ma base d'utilisateurs n'est pas du tout technique, donc je ne veux pas les forcer à faire des changements techniques dans les coulisses - si possible, je veux que le programme d'installation pour gérer cela pour eux.

Répondre

1

De votre question, il semble que vous stocker des données dans c: \ program files \ appName

Vous ne devez pas stocker de données modifiés par l'utilisateur ou de l'application dans c: \ program files, il ne doit contenir l'exécutable statique et soutenir les fichiers écrits lors de l'installation. Il suffit de stocker ces éléments dans ProgramData dès le départ.

Vous devez obtenir le chemin d'accès à ProgramData à partir de la variable d'environnement ALLUSERSPROFILE (ce qui signifie également qu'il fonctionnera sous XP, où il pointera sur Tous les utilisateurs). Sinon, si vous voulez avoir des données par utilisateur, utilisez plutôt USERPROFILE.

Tout cela est dû à des changements de sécurité, mais la virtualisation d'annuaire qui a lieu peut être extrêmement confuse. Particulièrement par exemple si vous installez en tant qu'administrateur (donc tout se passe comme prévu) mais ensuite en tant qu'utilisateur normal (où il commence à pointer ailleurs).

+0

Bien sûr, si vous effectuez cette modification, cela aura probablement un impact sur les installations existantes sous XP, mais le programme d'installation peut gérer cette migration. – hplbsh

Questions connexes