1

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

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 下的数据库,但他看不到安装后启动应用程序所做的更改。所以从桌面/程序文件/用户程序菜单启动程序=>一切都很好,但是安装后的第一次(自动)启动是一个问题。我不知道会发生什么,有什么想法吗?

4

1 回答 1

0

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

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

解决这个问题:

  1. 不要从安装程序启动您的程序。
  2. 在 %appdata% 中为您的程序创建一个目录并使用它。
于 2012-07-27T11:16:16.443 回答