8

У меня есть установка InstallShield, которая использует пользовательские действия, которые зависят от Visual C++ Runtime 8.0 sp1. Раньше мне удалось установить среду выполнения, используя модуль слияния, предоставленный Microsoft с помощью Visual Studio. Основываясь на том, как Visual Studio C++ Runtime 8.0 sp1 работает на Vista, время выполнения не может использоваться до последовательности фиксации установки.Как я могу программным образом определить, установлен ли Visual C++ Runtime 8.0?

Это означает, что я должен либо переместить выполнение моих пользовательских действий в последовательность фиксации (нежелательно, так как установка не может быть отменена во время этой последовательности, если что-то пойдет не так) или установите время выполнения Visual C++ до моей установки используя предварительное условие InstallShield.

Я бы предпочел установить Visual C++ Runtime в качестве предварительного условия, но предварительное условие для этого не предусмотрено InstallShield, поэтому мне пришлось написать свой собственный. Мне удалось выяснить, как настроить предварительное условие для установки среды выполнения, но я не знаю, как определить, установлен ли она. Есть ли ключ реестра или версия файла, которую я могу проверить, чтобы определить это?

+0

Для тех, кто пытается обнаружить среду Visual C++ 2010, вы можете найти полезные инструкции здесь: http://blogs.msdn.com/b/astebner/archive/2010/05/05/10008146.aspx – ephere

ответ

10

Я нашел записи в блогах, которые описывают обнаружение Visual C++ Runtime 8.0 и Visual C++ Runtime 8.1. В принципе, вы можете использовать интерфейс автоматизации MSI для поиска кодов продуктов для каждой из рабочих часов.

Вы можете также искать HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ [ProductCode] где [ProductCode] является код продукта для выполнения вы пытаетесь обнаружить (например. {7299052b- 02a4-4627-81f2-1818da5d550d} является кодом продукта для версии 8.8 sp1 runtime).

Эти методы работают только для обнаружения, если установлен распространяемый пакет времени исполнения; возможно, что среда исполнения установлена, даже если эти методы не указывают на это (например, если она была установлена ​​как модуль слияния вместо использования распространяемого), но в этом случае не должно повредить что-либо, чтобы установить распространяемый пакет ,