ファイルが見つかりませんXMLファイルにスローされた例外がOutlookによって引き起こされる可能性があります
-
04-10-2019 - |
質問
アプリケーションがOutlookによって呼び出されると、ファイルが見つかりませんでした。電子メールがコンピューターに保存されたときに呼び出され、アプリが呼び出され、保存されたメッセージでアクションを実行します。
私のアプリはXMLファイルを使用して構成可能な設定を保存しますが、このファイルは、Outlookがアプリケーションを実行するために呼び出されたときには見つかりません。プログラムを手動で実行すると、正常に機能します。
例外の興味深い点はこれです:
System.io.FileNotFoundException:ファイル 'C: Program Files Common Files System MSMAPI 1033 SETTINGSOPENED.XML'を見つけることができませんでした。
Outlookがファイルがここにあると考えるのはなぜですか?これはファイルのパスではありませんが、Outlookに関連していると確信しています。コードのパスを参照する方法は次のとおりです。
XmlDocument xDoc = new XmlDocument();
xDoc.Load("settingsOpened.xml");
ファイルが.exeと同じフォルダーにあります。 XMLファイルのフルパスをハードコーディングしたくありません。
どんな助けも大歓迎です。
ありがとう、ロス
解決
表示されているコードから、ファイルを探す場所として現在のパスを取ると想定します。現在のパスは、特定の操作がその値に影響を与えるため、少し予測不可能であり、各呼び出しに値が持続します。つまり、アプリケーションの別の部分、または別のアプリケーションでさえ、この値が次回使用される現在のパスを設定する場合。現在のパスを設定するには、一般的なダイアログを使用して特定のファイルを参照するのに十分です。
あなたの場合、私はどちらかをしようとします
- よく知られているフォルダーの1つから導出することにより、パスを明示的に指定します(たとえば、ユーザーのアプリパス -
Environment.GetFolderPath
とEnvironment.SpecialFolder
)
また
- DLLのアセンブリパスに対するパスを解決します。
のアセンブリパスを見つける myType
次のコードを使用できます。
String strPath = System.IO.Path.GetDirectoryName(typeof(myType).Assembly.CodeBase);
どちらの場合でも、新しいWindowsオペレーティングシステムでは、ユーザーがシステムドライブのすべてのパスに書き込みアクセスできないことを考慮する必要があります。