2010-09-05 8 views
0

Lorsque nous créons un projet de déploiement & pour notre application dans .net, le dossier par défaut pour notre application à installer est défini comme C:\Program Files..... Notre application fonctionnera parfaitement si nous utilisons un Machine Windows XP Mais si nous utilisons une machine Windows Vista ou Windows 7, l'application ne fonctionnera pas parfaitement, surtout si nous effectuons des opérations de fichiers dans notre application ...Problème de compatibilité avec Windows 7 dans .NET

Quelqu'un peut-il trouver une solution à ce problème? Existe-t-il un moyen de pénétrer ce contrôle de compte d'utilisateur et les contrôles d'accès aux fichiers de Windows 7? ou est-ce que any1 peut donner le choix de changer le dossier d'installation par défaut de [ProgramFilesFolder]\[Manufacturer]\[ProductName] vers un autre dossier?

+0

Vous n'avez pas fourni assez d'informations dans votre question. Principalement - que voulez-vous dire par "ne fonctionnera pas parfaitement"? Quelle est la solution? Des exceptions? Les erreurs? – Oded

+0

l'application va fonctionner .. mon application comprend de nombreuses opérations de fichiers, par exemple, la licence, alors que j'ajoute le fichier de licence 2 mon application, il se passe 2 être un problème. En bref, les opérations sur les fichiers ne peuvent pas être effectuées si iam installe mon application dans [ProgramFilesFolder] [Manufacturer] [ProductName]. mais il n'y a pas de problème si je l'installe dans d'autres répertoires tels que "C: \ Myapp \ New \" .. –

+0

Pouvez-vous s'il vous plaît modifier votre question et y ajouter directement les détails pertinents au lieu de les ajouter comme commentaires? – Oded

Répondre

3

Si votre application écrit dans un fichier situé sous son dossier d'installation (c'est-à-dire sous Program Files si le chemin par défaut est utilisé), il est mal écrit. Vous ne devriez pas essayer de contourner les mécanismes de sécurité du système d'exploitation pour protéger l'utilisateur des applications mal écrites; vous devriez plutôt corriger votre application pour qu'elle fonctionne correctement.

Et ce n'est, bien sûr, pas un problème .NET du tout. Toute application faisant la même chose, quel que soit le langage/cadre dans lequel elle est écrite, aura le même problème.

+0

Pouvez-vous donner une solution pour corriger ce bug pendant que nous développons de telles applications? –

+0

je veux dire, je veux 2do opérations de fichiers avec mon application, mais il n'est pas nécessaire que mon application doit être installée dans "C: \ Program Files" –

+0

Vous pouvez "faire des opérations de fichiers", juste contraint. Plus précisément, vous pouvez _read_ n'importe quoi dans votre dossier d'application. Vous ne pouvez pas écrire là, cependant. Vous pouvez écrire à d'autres endroits (par exemple, «Mes documents» de l'utilisateur qui exécute votre application). –

1

Vous devez toujours installer votre application dans le dossier Program Files. il y a de bonnes raisons pour l'avoir là-bas - une copie unique pour tous les utilisateurs, dans un endroit verrouillé bien connu où personne, sauf un administrateur, ne peut altérer vos binaires. Cependant, toute opération de fichier que vous effectuez doit se faire dans l'un des emplacements Windows standard pour les fichiers inscriptibles par l'utilisateur. Il existe plusieurs dossiers de ce type, selon le modèle d'utilisation du fichier. Vous pouvez en lire plus à ce sujet dans les suivants SO questions:

My winform app uses xml files to store data, where should I store them so Vista users can write to them?
Vista and ProgramData

1

données partagées entre tous les utilisateurs doivent aller dans C: \ ProgramData (utiliser Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) pour savoir où il vit en fait - il peut être différent entre les versions de Windows). Les données spécifiques à l'utilisateur doivent se trouver dans SpecialFolder.ApplicationData. Si l'utilisateur a un profil itinérant, celui-ci est partagé entre les machines.

Les données spécifiques à l'utilisateur qui sont également spécifiques à la machine doivent être en SpecialFolder.LocalApplicationData.

Si vous avez vraiment besoin de mettre quelque chose dans le répertoire d'installation de votre programme, vous devez le faire avec les privilèges d'administrateur.

Vous devriez le faire en demandant l'élévation lors de la première exécution du programme. De préférence, vous devriez le faire pendant l'installation (parce que vous êtes déjà élevé).

1

Tout d'abord, vous ne devriez pas mettre votre application à installer sous C: \ Program Files \ ..., vous devriez le mettre à la place % PROGRAMFILES% \ ... Si celles-ci équivaut généralement à la même chose, ils peuvent être différents sur un système 64 bits, ou ils peuvent être très différents si le système a été configuré de cette façon.

Comme déjà mentionné, n'essayez pas de contourner l'UAC, il est là pour une raison, et votre programme n'est pas plus spécial que n'importe quel autre programme sur le système.Au lieu de cela, vous devez définir votre manifeste d'application pour demander l'autorisation au niveau administratif au lancement (qui, s'il est accordé, contourne la virtualisation du système de fichiers, bien que l'utilisateur puisse le refuser ou même ne pas avoir le droit de lancer admin). L'autre chose que vous pouvez faire est de définir les ACL sur le dossier dans lequel se trouve votre application, et donner à tous les utilisateurs sur l'accès en lecture/écriture de l'ordinateur à ce dossier (cela devrait être fait au moment de l'installation).

Ou vous pouvez faire les choses correctement et stocker vos fichiers de données dans le dossier% APPDATA%, dont vous avez tous les droits, bien que ces dossiers soient spécifiques à chaque utilisateur du système.

Questions connexes