背景:flutter打包windows桌面应用自分发后,由于部分用户电脑未安装vc++环境,导致应用无法正常启动,查阅了flutter官方文档,描述的比较简略,所以还是针对这部分分享下个人的踩坑记录
如图:
上述文件不足以分发和运行应用程序,因为目标(最终用户)计算机中还需要 Visual C++ 运行时库。
要确保所需库的可用性,您可以复制以下 Visual Studio .dll 文件:
msvcp140.dllmsvcp140_1.dllmsvcp140_2.dllvcruntime140.dllvcruntime140_1.dll
从以下路径(或根据您的 Visual Studio 版本的类似路径):
C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\VC\
Redist\MSVC\14.34.31931\x64\Microsoft.VC143.CRT\
并将其与其他 .dll 文件一起放在 Project Build Release 文件夹中。
方式一:手动copy
手动copy dlls至 Project Build Release 文件夹中。
方式二:通过插件库cmake引入dlls
set(<project_name>_bundled_libraries
"${CMAKE_CURRENT_SOURCE_DIR}/../native/lib/windows_x64/msvcp140_1.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/../native/lib/windows_x64/msvcp140_2.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/../native/lib/windows_x64/msvcp140.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/../native/lib/windows_x64/vcruntime140_1.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/../native/lib/windows_x64/vcruntime140.dll"
PARENT_SCOPE
)
注:project_name需要替换为你的cMakeLists.txt中的实际项目名
方式三: 在主工程的windows/CMakeList.txt中引入dlls
# 在CMake中确保所有相关DLL都被包含
message("[test] 正在安装DLL文件... DESTINATION:${INSTALL_BUNDLE_LIB_DIR}")
install(FILES
"${CMAKE_CURRENT_SOURCE_DIR}/../native/lib/windows_x64/msvcp140_1.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/../native/lib/windows_x64/msvcp140_2.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/../native/lib/windows_x64/msvcp140.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/../native/lib/windows_x64/vcruntime140_1.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/../native/lib/windows_x64/vcruntime140.dll"
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime
)
注:记得把dlls也放到对应目录,CMAKE_CURRENT_SOURCE_DIR这个变量就是当前cmake文件的所在目录
方式四:将此dlls添加到 Windows 安装程序
将此dlls添加到 Windows 安装程序(例如 Inno Setup、WiX 等),这个也是flutter官方文档中提及的方式 具体需要配合所选这的widnows打包程序使用,下面以inno setup为例:
// setup.iss
[Files]
Source: "<your_dlls_dir>"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs comparetimestamp;
引用部分
- Windows 开发 |扑动 --- Windows development | Flutter
- 打包和分发 Flutter 桌面应用程序:开源和独立开发者缺失的指南 - 创建 Windows .exe 安装程序[第 2 部分共 3 部分] |作者 Flutter Gems |中等 --- Packaging and Distributing Flutter Desktop Apps : The Missing Guide for Open Source & Indie Developers — Creating Windows .exe installer [Part 2 of 3] | by Flutter Gems | Medium