2011-06-03 177 views
1

因此,我創建了一個簡單的WPF應用程序,該應用程序允許用戶將字符串插入到SQLite數據庫(.S3DB文件)中。用戶還可以從數據庫中選擇一個字符串,並從數據庫中刪除字符串...非常簡單的應用程序。將SQLite與Windows應用程序集成

我想分發這個簡單的應用程序,所以我通過創建一個新項目並使用VS2010上的安裝嚮導爲應用程序創建了setup.exe文件。當用戶安裝該應用程序,它創建在Program Files目錄下的「TestDatabase」文件夾,並將這兩個文件與.exe文件一起:

  1. System.Data.SQLite.DLL文件(因爲它是一個檢測依賴)
  2. TestDatabase.s3db文件(測試數據庫供用戶使用)

當我我開發的計算機上安裝它...一切正常。但是,當我將它安裝在另一臺計算機上時,它會在我嘗試從應用程序(存儲在C:\ Program Files(x86)\ TestDatabase \ TestDatabase.s3db)中打開數據庫時崩潰。

我想知道是否有人可以幫助解決這個問題?謝謝。

回答

1

我意識到,之所以它崩潰,當我打開數據庫是因爲我沒有安裝在安裝程序包我正在測試的新電腦。安裝程序包包含所有運行時組件和依賴項。該安裝包可以在這裏找到:

http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

此外,ravenspoint,RandomEngy和bryanbcook ......你們是對的。從Program Files文件夾讀取/寫入數據庫是一個壞主意,因爲從Program Files文件夾訪問數據庫時可能會發生權限問題。所以我將數據庫保存在AppData文件夾中,在該文件夾中可以讀取/寫入數據庫而沒有任何許可問題。

0

可能是一個權限問題。您可能想爲此使用獨立存儲。

也可能是您的項目正在使用來自GAC的程序集。確保你的裝配對你的項目是本地的。

4

除非以管理員模式運行,否則不能修改Program Files目錄中的文件。您應該將.s3db文件部署到%appdata%之內的文件夾中。

1

你一定想解決方程的權限部分,但是你也可能遇到我在週末遇到的DbProviderFactories問題,同時想出如何使用sqlite.org的最新二進制文件。您可以閱讀details on my blog post但簡短的回答是,你需要一個配置文件條目或等效的代碼是這樣的:

<system.data> 
    <DbProviderFactories> 
    <remove invariant="System.Data.SQLite" /> 
    <add name="SQLite Data Provider" 
     invariant="System.Data.SQLite" 
     description=".Net Framework Data Provider for SQLite" 
     type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> 
    </DbProviderFactories> 
</system.data> 

而你需要確保你設置了「複製本地」在彙編等於真參考,以便SQLite程序集將包含在您的\ bin和安裝項目中。

0

問題是您的用戶沒有寫入Program Files文件夾的權限。快速的解決辦法是安裝測試數據庫文件中

C:/Program Data/<your company name>/<your application name>/ 

但是,不使用安裝程序數據庫文件拖放到某些特定文件夾是一個好主意。當您想要將已更新的應用程序分發給安裝了先前版本的用戶時,最終會出現問題。最好在應用程序中編寫代碼來查找數據庫,並在未找到的情況下創建一個新的代碼。這樣,更新後的應用程序可以使用由以前的版本生成的數據庫,因此可能代表大量的用戶投資。

有關如何詳細數據庫驅動的應用程序的升級處理更多詳細信息,請參閱How to manage desktop file database versions?

相關問題