2016-01-20 58 views
0

首先,讓我解釋我想實現的目標:我正在嘗試創建一個可移植的Windows應用程序(32位),它執行排序索引並將其存儲在數據庫。我希望應用程序在數據庫管理方面是自包含的。每當應用程序運行時,它應該查看預先確定的位置(可能是應用程序數據)以查看數據庫是否存在以及數據庫是否不存在(由用戶或首次運行刪除),然後使用我將附加到Exe的腳本。在WPF應用程序中嵌入SQL Server CE

我決定使用SQL Server CE來滿足我的要求,並且它的工作原理非常好,它允許我即時創建數據庫並在其中生成表(如果缺少任何表)。但是我無法將它整合到便攜式應用程序中。如果我必須與任何人分享我的應用程序,我必須分別與exe分享exe,這是我想避免的。有問題的主dll是System.Data.SqlServerCe.dll,我需要提供,但此dll依賴於某些本機dll:Microsoft.VC90.CRT,sqlceca40.dll,sqlcecompact40.dll,sqlceer40EN.dll,sqlceme40.dll, sqlceqp40.dll,sqlcese40.dll(它們駐留在它們自己的獨立文件夾結構中 - x86和amd64)。

我決定嘗試將dll嵌入到我的exe文件中,並使用如下代碼所示的代碼:Embedding unmanaged dll into a managed C# dll(Mark的回答),我成功地做了同樣的事情,但是應用程序無法加載本地dll作爲System.Data .SqlServerCe.dll將查找本機dll,期望存在文件夾結構,但該文件夾結構不存在於嵌入式資源中,並且失敗。

那麼我怎樣才能解決這個問題,而不訴諸於安裝程序?或者,也許還有其他更好的方法來實現我所嘗試的?提前致謝。

回答

0

您應該將您的應用程序標記爲x86。 然後將非託管dll和System.Data.SqlServerCe.dll解壓到與.exe相同的文件夾中。 要求安裝vC++運行時(或安裝vC++運行時的.net 3,5 sp1)

+0

嘿Erik,感謝您的回覆......如果我這樣做了,那麼用戶最終會得到隨機的dll目前突然出現..然後,它將需要清理每當應用程序退出或崩潰...有沒有辦法將dll單獨加載到內存或臨時文件夾在最壞的情況下,並從那裏引用? – user96551

+0

不,從內存或應用程序文件夾外的文件夾無法加載 – ErikEJ