我有一个奇怪的问题,使用vb.net(vs2010)和SQLite数据库:我做了安装程序包与安装和部署项目,似乎一切工作正常。我的SQLite数据库安装在CommonApplicationData文件夹和ProgramFiles \ ProductName下的软件下。在我设置自定义动作的设置项目,用户可以选择要运行的软件安装后: /的startApp =“[检查]”程序连接后安装到未知(?)sqlite数据库
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的我设置在启动时:
AppDomain.CurrentDomain.SetData("DataDirectory", Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData))
这里出现了一个奇怪的行为:如果用户在安装后启动应用程序,程序将连接到另一个(?)数据库,而不是在CommonApplicationData下安装。如果用户插入数据,似乎一切工作正常。 关闭应用程序并从桌面/程序文件/用户程序菜单启动新程序后,将程序连接到安装在CommonApplicationData下的数据库,但是他看不到安装后启动应用程序的更改。因此,从桌面/程序文件/用户程序菜单启动程序=>一切正常,但安装后的第一个(自动)启动是一个问题。我找不到会发生什么,有什么想法?
嗨基督教,我在我的文章中失败了,标志着这些变化大胆。所以,数据库是在CommonApplicationData下,并且程序exe和其他dll在ProgramFiles \ ProductName下。所以数据将被写入CommonApplicationData而不是ProgramFiles。唯一的问题是,如果你启动应用程序。安装后,程序肯定不会写入CommonApplicationData下的数据库。但是哪里?我无法弄清楚为什么,以及“未知”数据库的存储位置。从桌面或用户程序菜单启动一切正常。 – 2012-07-27 12:05:44
如果我从软件安装较新版本,则会发生同样的问题。 – 2012-07-27 12:07:34
如果我正确理解CommonApplicationData,它仍然是个人为每个用户创建的帐户相关文件夹。 因此,您的用户应该有管理员和文件夹B的文件夹A.只需找出用户路径并将用户名替换为管理员。本文包含一些细节:http://www.codeproject.com/Tips/61987/Allow-write-modify-access-to-CommonApplicationData – 2012-07-30 06:25:07