Как InstallShield может проверить, установлен ли SQL Server 2005 (3.1) Compact Edition (CE)

Я разрабатываю настольное приложение для Windows, для которого требуется SQL Server 2005 Compact Edition (SQLServerCE31-EN.msi) для установки. Я использую InstallShield 2011 для установки в качестве предварительного условия в процессе установки.

Чтобы придумать предварительное определение, я использовал Process Monitor чтобы убедиться, что эти разделы реестра проверяются, когда SQLServerCE31-EN.msi запускается вручную (не через установщик):

32-разрядная версия: HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server Compact Edition\v3.1

64-разрядная версия: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Microsoft SQL Server Compact Edition\v3.1

В большинстве случаев эта проверка работает, и InstallShield пропускает предварительные требования, если они уже определены как установленные. Однако на некоторых машинах (64-разрядная версия Windows 7 Ultimate с уже установленным SQL Server Compact Edition 3.5) ключ не существует, хотя Microsoft SQL Server 2005 Compact Edition [ENU] находится в разделе Программы и компоненты.

В обоих следующих местах (на 64-разрядной машине) есть раздел реестра, который можно использовать для проверки того, что SQL Server Compact Edition 3.5 установлен, но ничего не показывает, установлена ​​ли версия 3.1.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Compact Edition\v3.5
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server Compact Edition\v3.5

Я совершенно уверен, что обе версии могут быть установлены, и дело не в том, что 3.5 обновляет 3.1, хотя, очевидно, это более новая версия.

Как проверить, установлен ли SQL Server 2005 Compact Edition?

Для пользователей InstallShield это .prq файл, который мы сейчас используем:

<?xml version="1.0" encoding="UTF-8"?>
<SetupPrereq>
 <conditions>
  <condition Type="1" Comparison="2" Path="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Compact Edition\v3.1" FileName="" ReturnValue="" Bits="2"></condition>
 </conditions>
 <files>
  <file LocalFile="&lt;ISProjectFolder&gt;\..\InstallShieldPreRequisites\Microsoft SQL Server 2005 Compact Edition\SQLServerCE31-EN.msi" URL="http://download.microsoft.com/download/f/5/4/f54529c6-e316-4637-a211-95818fcd4451/SQLServerCE31-EN.msi" CheckSum="54854BAC91E616BF8F71184C05AD0355" FileSize="0,1819136"></file>
 </files>
 <execute file="SQLServerCE31-EN.msi" cmdline="/passive /norestart" cmdlinesilent="/passive /norestart" requiresmsiengine="1"></execute>
 <properties Id="{51BB3FEE-3851-4ECC-909A-C9D8EAF83254}" Description="This prerequisite installs Microsoft SQL Server 2005 Compact Edition"></properties>
</SetupPrereq>

Можно ли улучшить предварительный файл, указанный выше?


person Tom Robinson    schedule 19.10.2010    source источник


Ответы (2)


Вы можете использовать код продукта в кусте HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Installer \ Products, чтобы проверить, установлен ли SQL Server CE 3.1.

Например, код продукта SQL CE 3.5: {F0B430D1-B6AA-473D-9B06-AA3DD01FD0B8}

Мы найдем в реестре следующее: (обратите внимание, что код должен выполнить некоторую передачу) HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Installer \ Products \ 1D034B0FAA6BD374B960AAD30DF10D8B

Вы можете найти код продукта SQL CE 3.1 с помощью инструмента ORCA. Вот подробные шаги:

Запустите программное обеспечение ORCA. Откройте MSI-файл SQL CE 3.1 с помощью ORCA. Нажмите «Свойство» и проверьте «Код продукта» на правой панели.

Скачать: ORCA MSI Editor http://www.technipages.com/download-orca-msi-editor.html

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

person Robbie Meng    schedule 21.10.2010
comment
Спасибо, я разместил здесь дополнительные комментарии: social.msdn.microsoft.com/Forums/en-US/sqlce/thread/ - person Tom Robinson; 21.10.2010

Краткий вариант ответа:

Благодаря помощи Робби Менга из Microsoft мы обнаружили, что проверка этого ключа реестра - надежный способ проверить, установлено ли уже необходимое предварительное условие:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\1D034B0FAA6BD374B960AAD30DF10D8B
person Tom Robinson    schedule 21.10.2010