Question

Je reçois un fichier non trouvé exception lorsque mon application est appelée par Outlook. Il est appelé lorsqu'un e-mail est enregistré sur l'ordinateur l'application est appelée et effectue une action sur le message enregistré.

Mon application utilise un fichier XML pour stocker les paramètres configurables, mais ce fichier ne peut pas être trouvé lorsque Outlook appelle à l'application exécute. Si je lance le programme manuellement puis il fonctionne très bien.

La chose intéressante à propos de l'exception est la suivante:

System.IO.FileNotFoundException: Impossible de trouver le fichier 'C: \ Program Files \ Common Files \ System \ MSMAPI \ 1033 \ settingsOpened.xml.

Pourquoi Outlook ne pense que le fichier est ici? Ce n'est pas le chemin du fichier, mais je suis sûr est liée à Outlook. La façon dont je fais référence le chemin dans le code est juste:

XmlDocument xDoc = new XmlDocument();
xDoc.Load("settingsOpened.xml");

Avec le fichier étant dans le même dossier que le fichier .exe. Je ne veux pas coder en dur le chemin complet dans les fichiers XML soit.

Toute aide serait grandement appréciée.

Merci, Ross

Était-ce utile?

La solution

A partir du code ci, je suppose qu'il prend le chemin actuel comme emplacement pour rechercher le fichier. Le chemin actuel est un peu imprévisible que certaines opérations affectent sa valeur et la valeur est conservée à chaque appel. C'est à dire. quand une autre partie de votre demande, ou même un autre applciation, définit le chemin actuel, cette valeur est utilisée la prochaine fois. Pour définir le chemin actuel, il est enought d'utiliser un dialogue commun pour rechercher un certain fichier.

Dans votre cas, je vais essayer soit à

  • indiquer explicitement le chemin en le dérivant d'un des dossiers bien connus (par exemple le chemin d'application de l'utilisateur - rechercher Environment.GetFolderPath et Environment.SpecialFolder)

ou

  • pour résoudre le chemin relatif à votre chemin d'assemblage dll.

Pour trouver le chemin de montage pour myType vous pouvez utiliser le code suivant:

String strPath = System.IO.Path.GetDirectoryName(typeof(myType).Assembly.CodeBase);

Dans les deux cas, vous devriez considérer que dans les fenêtres plus récentes des systèmes d'exploitation, l'utilisateur n'a pas accès en écriture à tous les chemins du lecteur système.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top