1

我有一个奇怪的问题,使用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下的数据库,但是他看不到安装后启动应用程序的更改。因此,从桌面/程序文件/用户程序菜单启动程序=>一切正常,但安装后的第一个(自动)启动是一个问题。我找不到会发生什么,有什么想法?

回答

0

是否具有您的Installation Administrator-Privileges? 如果是,则可能发生以下情况:

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

做解决这一问题:

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

嗨基督教,我在我的文章中失败了,标志着这些变化大胆。所以,数据库是在CommonApplicationData下,并且程序exe和其他dll在ProgramFiles \ ProductName下。所以数据将被写入CommonApplicationData而不是ProgramFiles。唯一的问题是,如果你启动应用程序。安装后,程序肯定不会写入CommonApplicationData下的数据库。但是哪里?我无法弄清楚为什么,以及“未知”数据库的存储位置。从桌面或用户程序菜单启动一切正常。 – 2012-07-27 12:05:44

+0

如果我从软件安装较新版本,则会发生同样的问题。 – 2012-07-27 12:07:34

+0

如果我正确理解CommonApplicationData,它仍然是个人为每个用户创建的帐户相关文件夹。 因此,您的用户应该有管理员和文件夹B的文件夹A.只需找出用户路径并将用户名替换为管理员。本文包含一些细节:http://www.codeproject.com/Tips/61987/Allow-write-modify-access-to-CommonApplicationData – 2012-07-30 06:25:07