WPF关联.flw文件启动时Framework.DLL加载失败问题
解决WPF文件关联启动时依赖DLL找不到的问题
我尝试将.flw文件扩展名与WPF应用关联,实现双击该文件时启动应用并加载内容。在MainWindow的Loaded事件中添加了以下代码:
private void MainWindow_Loaded(object sender, RoutedEventArgs e) { string[] args = Environment.GetCommandLineArgs(); foreach (string arg in args) { if (System.IO.Path.GetExtension(arg) == ".flw") { Console.WriteLine("Path = " + arg); SerializationHelper.LoadFlow(arg); } } }
目前遇到的问题:.flw文件能正常读取,但应用依赖的Framework.DLL被提示找不到——系统会在.flw文件所在目录(如桌面)查找该DLL,而该DLL实际与应用exe处于同一目录。直接通过快捷方式启动应用则无此问题。
解决方法
切换应用工作目录至exe所在路径
双击文件启动应用时,系统默认的当前工作目录是该文件所在的文件夹,而非应用exe的目录,导致DLL加载路径错误。可以在App.xaml.cs的OnStartup方法中添加代码,强制将工作目录切换到exe所在目录:protected override void OnStartup(StartupEventArgs e) { string exeDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); System.IO.Directory.SetCurrentDirectory(exeDirectory); base.OnStartup(e); }这样后续加载依赖DLL时,系统会优先在exe所在目录查找,即可解决找不到DLL的问题。
确认命令行参数处理逻辑
现有代码中获取的文件路径是绝对路径,所以加载.flw文件的逻辑不受工作目录影响,无需修改。只需确保工作目录切换完成后再执行后续操作即可。
内容的提问来源于stack exchange,提问作者Hasan H
相关产品推荐
相关产品推荐

