【问题标题】:The best way to check if SQL CE is installed, and if so what version?检查是否安装了 SQL CE 的最佳方法是什么版本?
【发布时间】:2008-11-02 03:00:47
【问题描述】:

我编写了一个使用 SQL CE 3.5 的 VB.NET 应用程序。我很好奇是否有人有任何最佳实践或代码来帮助检查是否安装了 A)SQL CE 和 B)如果是,是什么版本。

我在 msdn 和 google 上搜索了任何东西,但没有发现任何有用的东西。我在注册表中四处寻找并找到了这个键: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Compact Edition\v3.5 字符串值为“版本”,数据为 3.5.5692.0。

所以我的假设是检查这个键的存在,但这让我很困扰,因为“3.5”键听起来确实像是与 3.5 DLL 绑定的。我想说的是,如果有人有 SQL CE,我不想强​​迫他们安装 SQL 3.5(在此处插入一些未来版本的 CE)。

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

【问题讨论】:

  • 请注意:该应用程序适用于 Windows 上的 SQL CE。我认为就像 BlackWasp 提到的那样,我可以在安装我的应用程序时强制执行安装的 SQL CE 版本。谢谢大家,尽管 BlackWasp 和 kleolb02 都不是我想要的,但它们为我提供了一些可以长期帮助我的东西。

标签: .net sql vb.net sql-server-ce


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        这是我的解决方案。它在我的安装文件中增加了 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>
        

        【讨论】:

          【解决方案5】:

          好的,这仅回答了您问题的第一部分,但希望它仍然有用... 这是我目前使用的:

          <Fragment>
              <util:RegistrySearch
                    Id='SearchForSQLCE'
                    Variable="SQLCEInstalled"
                    Result="exists"
                    Root="HKLM"
                    Key="SOFTWARE\Classes\Microsoft SQL Server Compact Edition Database File"
                    Win64="yes"
                         />
            </Fragment>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-19
            • 1970-01-01
            相关资源
            最近更新 更多