2016-01-20 57 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