讓Sqlite脫離VC Runtime獨立執行

2022-03-01 22:18:15 字數 1797 閱讀 6787

前段時間在開發oraytalk(傲瑞通)

的聊天記錄模組時用到了sqlite,這是我第一次接觸和使用sqlite,總體感覺還是非常不錯的。這裡把我使用sqlite的經驗跟大家分享一下。

sqlite是一款開源的、適合在客戶端和嵌入式裝置中使用的輕量級資料庫,支援標準的sql。

不像sqlserver或oracle的引擎是乙個獨立的程序、通過tcp或命名管道等與程式進行通訊,sqlite卻是作為程式的乙個部件、乙個構成部分,使用sqlite的方式就是直接在程式中進行api呼叫。

原始的sqlite是沒有乙個向sqlserver企業管理器的視覺化操作程式的,但是有個第三方開發的應用sqlitestudio非常不錯,基本的建庫、建表、編輯資料、匯出資料等功能都支援得很好。sqlitestudio執行截圖如下所示:

(2)sqlitestudio:好用的sqlite視覺化管理器。

(1)system.data.sqlite.dll是乙個標準的託管dll,我們可以直接在.net專案中引用並使用它,就像使用.net自帶的system.data命名空間中的各個物件一樣。

(2)sqlite.interop.dll是乙個非託管的dll,是sqlite引擎核心,我們需要將其拷貝到執行目錄下,在執行時,它會被system.data.sqlite.dll呼叫。

我們在專案開發完畢後測試的過程中發現,使用了sqlite的客戶端程式在某些機器上執行時會報錯,如下所示:

無法載入 dll"sqlite.interop.dll";由於應用程式配置不正確,應用程式未能啟動。重新安裝應用程式可能會糾正這個問題。(異常來自 hresult:0x800736b1)

經過一番折騰,才發現是這些機器上沒有安裝vc++執行時(visual c++ 2005 sp1 runtime),而sqlite.interop.dll的執行是需要vc++執行時支援的。這點太不友好了。我們的專案是基於.net 2.0開發的,windows xp sp1 及以上版本都自帶了這個framework,而這些機器不一定安裝了vc++執行時。所以我第一反應就是,嘗試讓sqlite在沒有安裝vc++執行時的機器上也能正常執行。

1.方案一

我baidu了一下,有個似乎可行的方案是這樣的:將msvcm80.dll、msvcp80.dll、msvcr80.dll這幾個動態庫也放到執行目錄下。這個方案我不太喜歡,於是我嘗試自己動手解決問題。

2.方案二

sqlite.interop.2010這個專案是核心,我們需要對它的一些設定稍微做些修改,這些小修改我花了一些時間摸索才成功,這裡就略去具體的摸索過程,直接給出摸索成果:

(1)開啟sqlite.interop.2010專案屬性頁面,配置屬性 -> c/c++ -> **生成 -> 執行庫,該項設定為 多執行緒除錯 (/mtd)。

(2)繼續 配置屬性 -> 清單工具 -> 輸入和輸出 -> 嵌入清單,該項原來是「是」,改成「否」。

(3)顯示所有專案檔案,然後找到sqlite.interop.2010.props檔案,並開啟。刪掉其中的配置節點。

(4)從專案中移除「resource files」資料夾。

(5)重新編譯專案,生成的sqlite.interop.dll便是我們所需要的。

能脫離vc++執行時執行的sqlite (v1.0.93.0)

讓你的AIR程式脫離AIR環境執行

我們都很喜歡air,因為她很美麗,但又不敢使用air,因為難以推廣,實在讓人為難。但是現在我們不再為難了,為什麼?因為我們已經找到了讓air程式脫離air環境的方法。首先,我們來分析一下air程式的執行機制,air檔案安裝後會在安裝目錄生成乙個.exe檔案,此檔案在啟動時首先呼叫air執行時庫ado...

讓Python更加充分的使用Sqlite3

我最近在涉及大量資料處理的專案中頻繁使用 sqlite3。我最初的嘗試根本不涉及任何資料庫,所有的資料都將儲存在記憶體中,包括字典查詢 迭代和條件等查詢。這很好,但可以放入記憶體的只有那麼多,並且將資料從磁碟重新生成或載入到記憶體是乙個繁瑣又耗時的過程。我決定試一試sqlite3。因為只需開啟與資料...

讓 Python 更加充分的使用 Sqlite3

我最近在涉及大量資料處理的專案中頻繁使用 sqlite3。我最初的嘗試根本不涉及任何資料庫,所有的資料都將儲存在記憶體中,包括字典查詢 迭代和條件等查詢。這很好,但可以放入記憶體的只有那麼多,並且將資料從磁碟重新生成或載入到記憶體是乙個繁瑣又耗時的過程。我決定試一試sqlite3。因為只需開啟與資料...