2010-09-21 22 views
1

Je reçois une exception de fichier introuvable lorsque mon application est appelée par Outlook. Elle est appelée lorsqu'un e-mail est enregistré sur l'ordinateur auquel l'application est appelée et effectue une action sur le message enregistré.Fichier non trouvé Une exception est levée pour le fichier XML éventuellement provoqué par Outlook

Mon application utilise un fichier XML pour stocker les paramètres configurables, mais ce fichier est introuvable lorsque les appels Outlook pour exécuter l'application. Si je lance le programme manuellement, cela fonctionne correctement.

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 pense-t-il que le fichier est présent? Ce n'est pas le chemin pour le fichier mais je suis sûr que c'est lié à 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 pour les fichiers XML non plus.

Toute aide serait grandement appréciée.

Merci, Ross

Répondre

0

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 car certaines opérations affectent sa valeur et la valeur est conservée à chaque appel. C'est à dire. lorsqu'une autre partie de votre application, ou même une autre applciation, définit le chemin courant, cette valeur est utilisée la prochaine fois. Pour définir le chemin actuel, il est suffisant d'utiliser une boîte de dialogue commune pour rechercher un certain fichier.

Dans votre cas, je vais essayer soit à

  • indiquer explicitement le chemin en le dérivant d'un des puits dossiers connus (par exemple, le chemin d'application de l'utilisateur - chercher 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 exploitation des systèmes que l'utilisateur n'a pas accès en écriture à tous les chemins de le lecteur système.