我编写了一个使用SQL CE 3.5的VB.NET应用程序。我很好奇是否有人有任何最佳实践或代码来帮助检查是否安装了A)SQL CE和B)如果是,那么什么版本。
我搜索了msdn和google,但我找不到任何有用的东西。我在注册表中查找并找到了这个键: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server Compact Edition \ v3.5 字符串值为“Version”,数据为3.5.5692.0。
因此,我的假设是检查是否存在此密钥,但它困扰我,因为“3.5”键肯定听起来像是与3.5 DLL绑定。我想说的是,如果他们有SQL CE(在这里插入一些未来版本的CE),我不想强迫某人安装SQL 3.5。
其他信息: 目标框架:.NET 2.0 最低目标操作系统:Windows XP SP2
答案 0 :(得分:2)
不确定您是在Windows机器还是便携式设备上讨论SQL CE。在PC上,最好的办法是在应用程序中分发SQL CE版本。您可以在http://www.microsoft.com/Sqlserver/2005/en/us/compact-redistribute.aspx注册获取相关权限。
答案 1 :(得分:1)
正如BlackWasp所指出的,最好的方法是将SqlServerCe-程序集与您的应用程序一起分发。如果要检查数据库文件(SDF文件)的版本,应该查看here。
希望这有帮助。
答案 2 :(得分:1)
广泛接受的方法是检查MSI安装程序保存在注册表中的产品标识符(GUID)。如果您没有安装有问题的产品,您可以使用名为Orca(Windows SDK的一部分)的工具破解MSI并以此方式获取GUID。大多数(如果不是所有)安装构建器都有一个操作或任务可以作为预请求测试的一部分,甚至VS2005 / 2008也具有此功能。
要检查版本,我会在注册表中再次挖掘,或者查看文件版本。
答案 3 :(得分:1)
这是我的解决方案。它为我的安装文件添加了5兆,但它现在也可以脱机安装。安装需要几秒钟的时间,但它始终是正确的。
为什么这应该是事实上的解决方案:
它只有5兆(但你还可以使用下载)
DownloadUrl="http://download.microsoft.com/download/0/5/D/05DCCDB5-57E0-4314-A016-874F228A8FAD/SSCERuntime_x86-ENU.exe"
SourceFile="SSCERuntime_x86-ENU.exe"
Compressed="no"
这是我的解决方案:
<PackageGroup Id="SQLExpressCE">
<ExePackage
Vital="yes"
SourceFile="SSCERuntime_x86-ENU.exe"
InstallCondition="NOT VersionNT64"
//Include the exes(only about 2.5 megs each)
//Setting this to no causes your bootstrapper to download on installation but since this will always be trying to install, it is probably best to include it
Compressed="yes"
//install quietly without an interface
InstallCommand="/i /quiet /n"
/>
<ExePackage
Vital="yes"
InstallCondition="VersionNT64"
SourceFile="SSCERuntime_x64-ENU.exe"
Compressed="yes"
InstallCommand="/i /quiet /n"
/>
</PackageGroup>
答案 4 :(得分:0)
好的,这只能回答你问题的第一部分,但希望它无论如何都有用...... 这就是我目前使用的:
<Fragment>
<util:RegistrySearch
Id='SearchForSQLCE'
Variable="SQLCEInstalled"
Result="exists"
Root="HKLM"
Key="SOFTWARE\Classes\Microsoft SQL Server Compact Edition Database File"
Win64="yes"
/>
</Fragment>