4

我编写了一个使用 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,我不想强​​迫他们安装 SQL 3.5(在此处插入一些未来版本的 CE)。

其他信息:目标框架:.NET 2.0 最低目标操作系统:Windows XP SP2

4

5 回答 5

2

不确定您是在谈论 Windows 机器还是便携式设备上的 SQL CE。在 PC 上,最好的办法是将 SQL CE 版本与您的应用程序一起分发。您可以在http://www.microsoft.com/Sqlserver/2005/en/us/compact-redistribute.aspx注册以获得这样做的权利。

于 2008-11-02T12:34:41.730 回答
1

正如 BlackWasp 所指出的,最好的方法是将 SqlServerCe 程序集与您的应用程序一起分发。如果您想检查数据库文件(SDF 文件)是哪个版本,您应该查看此处

希望这可以帮助。

于 2008-11-02T12:51:52.537 回答
1

执行此操作的广泛接受的方法是检查由 MSI 安装程序保存在注册表中的产品标识符 (GUID)。如果您没有安装有问题的产品,您可以使用名为 Orca(Windows SDK 的一部分)的工具破解打开 MSI 并以这种方式获取 GUID。大多数(如果不是全部)安装构建器都有一个动作或任务可以作为 pre-req 测试的一部分执行此操作,甚至 VS2005/2008 也具有此功能。

要检查版本,我会在注册表中再次挖掘,或者查看文件版本。

于 2008-11-02T13:02:11.643 回答
1

这是我的解决方案。它在我的安装文件中增加了 5 兆,但它现在也可以离线安装。安装需要几秒钟的额外时间,但它总是做正确的事情。

为什么这应该是事实上的解决方案:

  • 确保正确安装程序应该是该功能的安装程序的责任
  • 您总是希望最终结果是安装了 SQL Server CE(即使用户对原始安装很生气)
  • 仅额外 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>
于 2015-07-09T17:16:12.500 回答
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>
于 2013-07-24T13:07:24.543 回答