Лучший способ проверить, установлен ли SQL CE, и если да, то какая версия?

Я написал приложение VB.NET, которое использует SQL CE 3.5. Мне любопытно, есть ли у кого-нибудь лучшая практика или код, помогающий проверить, установлен ли 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 3.5, если у него есть SQL CE (вставьте сюда какую-то будущую версию CE).

Дополнительная информация: Целевая платформа: .NET 2.0 Минимальная целевая ОС: Windows XP SP2

5 ответов

Решение

Широко распространенным методом для этого является проверка идентификатора продукта (GUID), который сохраняется в реестре установщиком MSI. Если у вас не установлен продукт, о котором идет речь, вы можете открыть MSI с помощью инструмента под названием Orca (часть Windows SDK) и таким образом получить GUID. У большинства, если не у всех сборщиков установки есть действие или задача, которая может сделать это как часть предварительного теста, даже VS2005/2008 имеет такую ​​возможность.

Чтобы проверить версии, я бы снова покопался в реестре или, возможно, посмотрел на версии файлов.

Не уверен, если вы говорите о SQL CE на компьютере с Windows или портативном устройстве. На ПК лучше всего распространять версию SQL CE вместе с вашим приложением. Вы можете зарегистрироваться для получения прав на это по адресу http://www.microsoft.com/Sqlserver/2005/en/us/compact-redistribute.aspx.

Это моё решение. Он добавил 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>

Как указывал BlackWasp, лучшим способом является распространение сборки SqlServerCe вместе с вашим приложением. Если вы хотите проверить, какая версия файла базы данных (SDF-файл), вы должны посмотреть здесь.

Надеюсь это поможет.

Хорошо, это только ответит на первую часть вашего вопроса, но надеюсь, что это все равно полезно... Вот что я сейчас использую:

<Fragment>
    <util:RegistrySearch
          Id='SearchForSQLCE'
          Variable="SQLCEInstalled"
          Result="exists"
          Root="HKLM"
          Key="SOFTWARE\Classes\Microsoft SQL Server Compact Edition Database File"
          Win64="yes"
               />
  </Fragment>
Другие вопросы по тегам