2009-02-06 5 views
1

J'ai une petite application de bac qui veut écrire dans son propre dossier sous le répertoire Program Files. Je sais que ce n'est pas un design ultime et je vais le réparer, mais je veux d'abord comprendre comment cela fonctionne. En cours d'exécution sur une machine Vista 32 bits, il écrit les fichiers sur le VirtualStore et fonctionne comme il le devrait. Mais lors de l'installation sur une machine Vista 64 bits, je reçois immédiatement une exception UnauthorizedAccessException pour essayer d'écrire dans le répertoire dans Program Files (et Program Files (x86)).VirtualStore ne fonctionne pas sur Vista x64

La redirection VirtualStore ne semble pas fonctionner sur Vista 64 bits. Des idées?

C'est une application C# écrite en Visual Studio 2008 et j'utilise un obj FileStream pour conserver le flux sur le disque.

+0

laissez celui-ci ouvert et fermez le précédent – Alnitak

+0

Les gens l'ont fait pour moi, merci! – Niklas

Répondre

1

J'ai donc réussi à obtenir ce résultat en compilant tous les projets sur la plateforme cible x86. Donc x64 ne fonctionne pas avec VirtualStore sur Vista 64 et ne compile pas non plus vers "Any CPU". Et j'ai dû le définir pour l'ensemble de la solution (dans le Gestionnaire de configuration), il suffit de le définir pour chaque projet individuel ne fonctionnait pas.

Il est temps de le réécrire à l'aide du dossier AppData ou d'IsolatedStorage. Merci pour votre aide!

1

Vous avez plus d'informations sur l'erreur?
Utilisez-vous les outils sysinternals pour les erreurs d'exécution/d'accès au moniteur?
Jetez un coup d'oeil Observateur d'événements pour l'erreur aussi.

1

Je le réparerais maintenant. De toute façon, vous n'auriez jamais dû écrire vos trucs dans ce répertoire, cela viole les règles. Votre produit ne fonctionnera pas s'il y a plusieurs utilisateurs connectés au serveur en même temps, même avant VISTA. Vista 64 bits détectera que vous êtes une application 32 bits et redirigera automagiquement vos tentatives de modification "Program Files" à "Program Files x86". En fait, cela vous fait croire que vous utilisez un système 32 bits (voir here).

Je suppose qu'il y a une protection supplémentaire dans cette couche d'émulation des programmes essayant de changer les choses sous Program Files. Ou peut-être que les ACL sont mieux définies sous Vista 64 bits (ou la couche d'émulation qui est plus probable).

Résultat: ne faites pas ce que vous faites, Microsoft nous a dit de ne pas le faire depuis longtemps maintenant.

+0

Oui, je le sais et je vais le réécrire en utilisant AppData ou le stockage isolé, mais il me manque encore des bogues que j'agis sous 32 et 64 bits. Et je ne comprends pas pourquoi. – Niklas

+0

Voir les mises à jour pour les possibilités (ou laisser tomber Raymond Chen une ligne à The Old New Thing, mais ne soyez pas surpris s'il vous donne un peu de raillerie à ce sujet :-). – paxdiablo

+0

Merci Pax! Le truc de wierd (er) est que ça ne marche toujours pas quand je le compile pour 64 bits et que je crée un programme d'installation 64 bits. :(. – Niklas

Questions connexes