Domanda

sto diventando un file non trovato un'eccezione quando la mia applicazione si chiama da Outlook. Si chiama quando una e-mail viene salvato sul computer l'applicazione si chiama ed esegue un'azione sul messaggio salvato.

La mia applicazione utilizza un file XML per memorizzare le impostazioni configurabili, ma questo file non può essere trovato quando Outlook chiama ad eseguire l'applicazione. Se si esegue il programma manualmente, allora funziona bene.

La cosa interessante l'eccezione è questo:

System.IO.FileNotFoundException: Impossibile trovare il file 'C: \ Programmi \ File comuni \ System \ MSMAPI \ 1033 \ settingsOpened.xml'.

Perché Outlook pensa che il file è qui? Questo non è il percorso del file, ma sono sicuro che è legato a Outlook. Il modo in cui sto riferimento il percorso nel codice è solo:

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

Con il file essere nella stessa cartella del file exe. Non voglio codificare il percorso completo in per i file XML sia.

Qualsiasi aiuto sarebbe molto apprezzato.

Grazie, Ross

È stato utile?

Soluzione

Dal codice mostrato presumo che ci vuole il percorso corrente come la posizione per cercare il file. Il percorso di corrente è un po 'imprevedibile come certe operazioni effettuano suo valore e il valore viene mantenuto a ogni chiamata. Cioè quando un'altra parte della vostra applicazione, o anche un altro applciation, imposta il percorso della corrente questo valore viene utilizzato la prossima volta. Per impostare il percorso della corrente è sufficienti per utilizzare una finestra di dialogo comune per cercare un determinato file.

Nel tuo caso mi piacerebbe provare a sia per

  • specificare il percorso in modo esplicito derivandola da una delle cartelle ben noti (ad esempio il percorso app dell'utente - look per Environment.GetFolderPath e Environment.SpecialFolder)

o

  • per risolvere il percorso relativo al percorso di montaggio di Dll.

Per trovare il percorso di montaggio per myType è possibile utilizzare il seguente codice:

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

In entrambi i casi si deve considerare che nel più recenti sistemi operativi Windows che l'utente non ha accesso in scrittura a tutti i percorsi della unità di sistema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top