Лучший способ проверить, установлен ли SQL CE, и если да, то какая версия? - PullRequest
4 голосов
/ 02 ноября 2008

Я написал приложение VB.NET, которое использует SQL CE 3.5. Мне любопытно, есть ли у кого-нибудь передовой опыт или код, помогающий проверить, установлен ли A) SQL CE и B) Если да, то какая версия.

Я что-то искал в msdn и google, но ничего полезного не нашел. Я копался в реестре и нашел этот ключ: HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ 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 ]

2 голосов
/ 02 ноября 2008

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

1 голос
/ 09 июля 2015

Это моё решение. Он добавил 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>
1 голос
/ 02 ноября 2008

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

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

1 голос
/ 02 ноября 2008

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

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

0 голосов
/ 24 июля 2013

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

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