前提・実現したいこと
WPF(C#)にて開発を行っています。
上記で作成したアプリケーション(アプリケーション名「WPF.exe」)
では、ファイルの関連付けを行いexe起動の他に
関連付けたファイル(拡張子が「ファイル名.abc」をダブルクリックした場合にも起動
するように作成しております。
当アプリでは「ファイル名.abc」にアプリの情報を保存しております。
アプリを起動する場合「ファイル名.abc」を読込処理を行う関係上
「ファイル名.abc」の指定が必須となります。
そのためアプリを開き「ファイル名.abc」を選択するというオペレーションだけではなく
「ファイル名.abc」を直接実行しアプリを起動とする方式を取り入れたいと考えております。
発生している問題・エラーメッセージ
exeをたたいて実行した場合は問題なく動作するのですが
関連付けたファイル(拡張子が「ファイル名.abc」をダブルクリックした場合に
「クラス名タイプの初期化子が例外をスローしました」と例外が発生します。
関連付けたファイル(拡張子が「ファイル名.abc」がカレントディレクトリになっていると考え
以下を設定しましたがそれでも解決に至っていない状況です。
System.Environment.CurrentDirectory
System.IO.Directory.SetCurrentDirectory
関連付けたファイル(拡張子が「ファイル名.abc」と同一フォルダにアプリケーションの
資材(dllなど)を配置すると動作するため実行ディレクトリなどの設定が
漏れているようなのですが実行ディレクトリの設定方法などどのように行えばよろしいでしょうか?
コード
/// <summary> /// App.xaml の相互作用ロジック /// </summary> public partial class App : Application {' public App() {' try { var cmd = System.Environment.GetCommandLineArgs(); string exePath = cmd[0]; string startupname = System.IO.Path.GetFileName(exePath); string startupPath = System.IO.Path.GetDirectoryName(exePath); if (cmd.Length > 1) {' // 関連付けファイルから起動された場合の処理 System.Environment.CurrentDirectory = startupPath; System.IO.Directory.SetCurrentDirectory(startupPath); // 以下グローバル変数参照時に「クラスGlobalVariableタイプの初期化子が例外をスローしました」と例外発生 GlobalVariable.ProjectWorkPath = cmd[1]; } else { GlobalVariable.ProjectWorkPath = string.Empty; } GlobalVariable.db = new DataAccess.DataAccessor(); } catch (System.Exception ex) { MessageBox.Show(ex.Message); MessageBox.Show(ex.StackTrace); } }
回答3件
あなたの回答
tips
プレビュー