【问题标题】:Program connects after install to an unknown(?) sqlite database安装后程序连接到未知(?)sqlite数据库
【发布时间】:2012-07-27 06:31:10
【问题描述】:

我在使用 vb.net (vs2010) 和 SQLite 数据库时遇到了一个奇怪的问题:我用 Setup and Deployment 项目制作了一个安装包,一切似乎都运行良好。我的 SQLite 数据库安装在 CommonApplicationData 文件夹下,软件安装在 ProgramFiles\ProductName 下。在安装项目中我设置了一个自定义操作,用户可以选择在安装后运行软件: /StartApp="[检查]"

Private Sub MyInstaller_Committed(ByVal sender As Object, ByVal e As InstallEventArgs)
Dim productName As String = Context.Parameters("ProductName")
StartAfterInstall = Me.Context.Parameters.Item("StartApp")
If StartAfterInstall = "1" Then
    Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))
    Shell(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\FB.exe")
End If
End Sub

在 ApplicationEvents.vb 中我在 StartUp 处设置:

    AppDomain.CurrentDomain.SetData("DataDirectory", Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData))

出现了奇怪的行为:如果用户在安装后启动应用程序,程序会连接到另一个(?)数据库,而不是安装在 CommonApplicationData 下。如果用户插入数据,似乎一切正常。 关闭应用程序并从桌面/程序文件/用户程序菜单重新启动后,将程序连接到安装在 CommonApplicationData 下的数据库,但他看不到安装后启动应用程序所做的更改。所以从桌面/程序文件/用户程序菜单启动程序=>一切都很好,但是安装后的第一次(自动)启动是一个问题。我不知道发生了什么,有什么想法吗?

【问题讨论】:

    标签: vb.net sqlite database-connection setup-project vb.net-2010


    【解决方案1】:

    您有安装管理员权限吗? 如果是,则可能会发生以下情况:

    1. 您正在写入 ProgramFiles。 Windows 将此重定向到管理员 %appdata%\roaming 文件夹,因为写入 ProgramFiles 被认为是错误的。
    2. 它转到管理员帐户,因为安装具有管理员权限。
    3. 当您从用户帐户启动程序时,会使用用户特定的 %appdata% 文件夹,该文件夹为空。

    解决这个问题:

    1. 不要从安装程序启动您的程序。
    2. 在 %appdata% 中为您的程序创建一个目录并使用它。

    【讨论】:

    • 嗨,Christian,我的帖子失败了,已将更改标记为粗体。因此,数据库位于 CommonApplicationData 下,程序 exe 和其他 dll 位于 ProgramFiles\ProductName 下。所以数据将被写入 CommonApplicationData 而不是 ProgramFiles。唯一的问题是,如果您启动应用程序。安装后,程序肯定不会写入CommonApplicationData下的数据库。但是哪里?我不知道为什么,以及“未知”数据库的存储位置。从桌面或用户程序菜单启动一切正常。
    • 如果我从软件安装更新版本,也会出现同样的问题。
    • 如果我理解 CommonApplicationData 正确,它仍然是为每个用户个人创建的帐户相关文件夹。因此,管理员应该有文件夹 A,用户应该有文件夹 B。只需找出用户路径并将用户名替换为管理员即可。本文中包含一些详细信息:codeproject.com/Tips/61987/…
    • 感谢 Christian,我找到了解决方案 here。这是文件夹重定向到 .\Local\VirtualStore\ProgramData 的问题,因为 CommonApplicationData 没有写权限,我们必须在安装后设置它。
    猜你喜欢
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    相关资源
    最近更新 更多