Frage

Ich erhalte eine Datei nicht gefunden Ausnahme, wenn meine Anwendung von Outlook aufgerufen wird. Es heißt, wenn eine E-Mail auf dem Computer gespeichert wird die App aufgerufen wird, und führt eine Aktion auf die gespeicherte Nachricht.

Meine app verwendet eine XML-Datei konfigurierbaren Einstellungen zu speichern, aber diese Datei nicht gefunden werden kann, wenn Outlook ausführt ruft die Anwendung. Wenn ich das Programm manuell ausführen, dann funktioniert es gut.

Das Interessante an Ausnahme ist dies:

System.IO.FileNotFoundException:.

: Konnte Datei '\ Programme \ Gemeinsame Dateien \ System \ MSMAPI \ 1033 \ settingsOpened.xml C' finden

Warum denkt Outlook, dass die Datei hier ist? Dies ist nicht der Pfad für die Datei, aber ich bin sicher, dass auf Outlook bezieht. Die Art und Weise ich Referenzierung den Pfad im Code ist nur:

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

Mit der Datei als EXE im selben Ordner sein. Ich will nicht zu hart Code des vollständigen Pfad in den XML-Dateien auch nicht.

Jede Hilfe würde sehr geschätzt werden.

Danke, Ross

War es hilfreich?

Lösung

Aus dem Code gezeigt Ich würde davon ausgehen, dass es den aktuellen Pfad als Standort zu suchen, die Datei nimmt. Der Strompfad ist etwas unvorhersehbar wie bestimmte Operationen seinen Wert bewirken, und der Wert wird bei jedem Aufruf anhielt. D. h wenn ein anderer Teil Ihrer Anwendung, oder sogar eine andere applciation, den Strompfad setzt wird dieser Wert beim nächsten Mal verwendet. Um den aktuellen Pfad festgelegt es enought ist einen gemeinsamen Dialog zu suchen Sie nach einer bestimmten Datei zu verwenden.

In Ihrem Fall würde ich versuchen, entweder zu

  • geben Sie den Pfad explizit durch sie von einem der bekannten Ordner Ableitung (zum Beispiel die App Pfad des Benutzers - Look für Environment.GetFolderPath und Environment.SpecialFolder)

oder

  • den Pfad im Verhältnis zu Ihrem DLL Montage Weg zu lösen.

Um den Montag Weg für myType finden Sie den folgenden Code verwenden:

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

In jedem Fall sollten Sie sich überlegen, dass die Systeme in neueren Windows-Betriebs der Benutzer nicht über Schreibzugriff auf alle Pfade des Systemlaufwerks.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top