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の下にインストールされるのではなく、別の(?)データベースに接続します。ユーザーがデータを挿入すると、すべてが正常に機能しているように見えます。アプリケーションを閉じてdesktop/programfiles / usersから新しく起動すると、プログラムメニューはプログラムをCommonApplicationDataの下にインストールされたデータベースに接続しますが、インストール後にアプリケーションを起動して行った変更を確認できません。したがって、デスクトップ/プログラムファイル/ユーザーのプログラムメニューからプログラムを開始する=>すべてが正常ですが、インストール後の最初の(自動)開始は問題です。何が起こっているのかわからない、何かアイデアはありますか?

4

1 に答える 1

0

インストール管理者-特権がありますか?はいの場合、おそらく次のことが起こります。

  1. ProgramFilesに書き込んでいます。ProgramFilesへの書き込みは不適切であると見なされるため、Windowsはこれを管理者の%appdata%\roamingフォルダーにリダイレクトします。
  2. インストールには管理者特権があったため、管理者アカウントに移動します。
  3. ユーザーアカウントからプログラムを起動すると、ユーザー固有の%appdata%フォルダーが使用されます。このフォルダーは空です。

その問題を解決してください:

  1. インストーラからプログラムを起動しないでください。
  2. プログラムのディレクトリを%appdata%に作成し、それを使用します。
于 2012-07-27T11:16:16.443 に答える