为了账号安全,请及时绑定邮箱和手机立即绑定

SQLite 的相对路径不适用于 WIX 工具集

SQLite 的相对路径不适用于 WIX 工具集

C#
慕森王 2022-01-16 14:45:46
我正在使用 SQLite 数据库并使用 WIX 工具集创建 WPF 应用程序的安装程序。问题是,当我直接从 Visual Studio 运行时,下面的相对路径可以正常工作,但当我使用 WIX 创建安装程序并且安装此安装程序运行程序后,它会为数据库文件提供致命错误。在项目目录中,我创建了一个数据库文件夹,数据库文件位于其中,如下图所示:通过 WIX Toolset 创建安装程序后,安装文件如下:inventory_control.db 文件路径:dbConnectionString 路径:我已经为相对路径连接字符串编写了代码,如下所示:相对路径:  string relativePath = @"Database\inventory_control.db";        string currentPath = System.Reflection.Assembly.GetExecutingAssembly().Location;        //string path = currentPath.Substring(0, currentPath.Length - 21);        string path = Path.GetDirectoryName(currentPath);        string absolutePath = System.IO.Path.Combine(path, relativePath);        string dbConnectionString = string.Format("Data Source={0};Version=3;Pooling=True;Max Pool Size=100;", absolutePath);        //string dbConnectionString = "Data Source=inventory_control.db";        sQLiteConnection = new SQLiteConnection(dbConnectionString);dbConnectionString给出正确的电流路径。当我直接从 Visual Studio 运行时,上面的相对路径工作正常,但当我使用 WIX 创建安装程序时不起作用。它给出了一个致命的错误。如何解决?
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

SQLite.Interop.dll:该文件SQLite.Interop.dll需要与其他运行时文件一起安装,以便 SQLite 正常运行。

x86文件和x64格式有两种风格。可能建议将这两个文件安装在各自的文件夹中:

您的安装文件夹层次结构 - 模型:

  • YourBinary.exe

  • x86\SQLite.Interop.dll

  • x64\SQLite.Interop.dll

  • System.Data.SQLite.dll

  • Etc...

读写数据库位置:然后您的数据库应存储在可写路径中(或者您需要使用自定义 ACL 权限使普通用户可写路径 - 这绝不是一个好主意)。

例外:显然try - catch你的数据库连接、更新和访问代码来检测这些类型的问题。


  1. 文件夹混淆:数据库文件夹内是否有数据库文件?看起来inventory_control.db文件安装到主应用程序文件夹,而不是数据库子文件夹?

    • 也许该文件是由application.exe错误的文件夹中生成的?

    • 或者您可能出于测试目的复制了主文件夹中的文件?

  2. 硬编码的 Dev-Box 原罪?: 里面写了什么Inventory Control.exe.config

    • 那里是否有相关设置可以覆盖您的代码值?

    • 那里可能有硬编码的开发箱罪过吗?

  3. 路径生成器:我假设您在启动期间已将应用程序的路径“装箱”,以确保它们是正确的?我喜欢复制路径并执行Start => Run并粘贴路径以查看它是否打开。CTRL + C当消息框显示时按下粘贴到记事本中。提取路径并在Start => Run.

    • string path = currentPath.Substring(0, currentPath.Length - 21);. 硬编码文件名中的字符数来获取父目录路径不是很健壮吗?

    • 你可以通过使用来改进它Path.GetDirectoryName(currentPath)吗?

    • 甚至可能: string dir = currentPath.Substring(0,currentPath.LastIndexOf('\\'));

  4. 附加调试器和调试二进制文件?:也许您可以安装调试二进制文件并附加到它们以进行调试,如下所述: wix c# app doesn't launch after installed . 只是为了获得真正的逐步调试会话。

  5. Path Spaces:数据库连接字符串。它的路径是否需要引号?如“带空格的路径”?您的 Visual Studio 项目的路径中可能没有任何空格,但安装时路径中有空格。


你的源代码中的这个结构看起来很奇怪,为什么有必要?:

  • <?define Inventory Control_TargetDir=$(var.Inventory Control.TargetDir)?>


查看完整回答
反对 回复 2022-01-16
  • 1 回答
  • 0 关注
  • 208 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信