Лучший способ проверить, установлен ли 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>