Wails应用打包后运行报错:无法读取配置文件路径异常

闲人红毅 阅读 19

用Wails开发的桌面应用,在开发环境通过wails dev能正常读取assets/config.json,但打包成exe后运行就报错”config file not found”。我按照文档把配置文件放到了assets目录,打包时也加了wails build --assets参数,这是哪里出问题了?

main.go里是这样读取文件的:


module.OnStartup(func() {
  fs := app.FileSystem()
  content, err := fs.ReadFile("config.json")
  // ...错误处理代码
})

尝试过把路径改成绝对路径、相对路径都不行,wails.json里的assetPath配置也检查过没问题。是不是打包时assets目录没正确包含进去?有没有什么调试路径的方法?

我来解答 赞 4 收藏
二维码
手机扫码查看
2 条解答
宇文慧利
这个问题的关键在于打包后的文件读取方式和开发环境不一样。Wails打包后,assets目录会被嵌入到二进制文件里,所以你不能用普通的文件系统路径去访问。

报错的原因是 fs.ReadFile("config.json") 这个调用在生产环境找不到文件。虽然你在wails.json里配置了assetPath,也用了 wails build --assets 参数,但代码里的读取逻辑需要调整。

正确的做法是使用 app.EmbeddedFileSystem() 来读取嵌入的资源文件。具体修改如下:

module.OnStartup(func() {
fs := app.EmbeddedFileSystem()
content, err := fs.ReadFile("assets/config.json")
if err != nil {
log.Fatal("读取配置文件失败:", err)
}
// 正常处理逻辑
})

注意这里必须加上assets前缀,因为打包时是按照这个目录结构嵌入的。

调试这种路径问题有个小技巧,可以先列出所有嵌入文件看看:
fs := app.EmbeddedFileSystem()
files, _ := fs.ReadDir("assets")
for _, f := range files {
fmt.Println(f.Name())
}


这样就能确认打包后的文件是不是真的被打进去了。记得重新build后再测试,应该就没问题了。
点赞
2026-02-17 18:03
松静🍀
这个问题的核心在于打包后的文件路径和开发环境不一样,Wails打包后会把assets目录的内容嵌入到二进制文件里,所以直接用文件系统读取就会出问题。更优雅的做法是改用嵌入式文件系统的读取方式。

建议你调整代码结构,利用Wails自带的嵌入式文件系统来处理:

module.OnStartup(func(ctx context.Context) {
// 使用嵌入式文件系统
content, err := app.EmbeddedFileSystem().ReadFile("assets/config.json")
if err != nil {
log.Fatalf("读取配置文件失败: %v", err)
}
// 处理配置文件内容
})


这样做的好处是统一了开发和生产环境的文件读取方式,避免了环境差异导致的问题。记得在wails.json里保持assetPath配置为"assets",然后正常执行 wails build 就可以了,不需要额外加参数。

如果想调试打包后的文件路径,可以在程序启动时打印当前工作目录 os.Getwd(),通常你会发现生产环境的工作目录和预期的不一样,这也是为什么直接读取文件系统会失败的原因。

说个题外话,这种环境差异确实挺烦人的,我自己也被坑过好几次。重构成统一使用嵌入式文件系统后,这类问题就少了很多。
点赞 2
2026-02-14 08:10