Почему InstallShield 2009 не обнаруживает.NET 3.5 SP 1?

В Windows Server 2003 Standard Edition клиент устанавливал.NET 3.5 SP 1. Каждый раз, когда мы запускаем наш установщик, созданный с помощью InstallShield 2009, установщик жалуется, что на целевом компьютере нет зависимости.NET 3.5 SP 1. Заказчик несколько раз удалял и переустанавливал.NET 3.5 SP 1, каждый раз перезагружаясь, но наш установщик так и не обнаружил его. Установщик, кстати, везде работает нормально.

Для тестирования мы успешно запустили одно из наших приложений, созданных с использованием.NET 3.5 SP 1 (в нем используется LINQ), но у нас нет установщика. Там нет никаких проблем, поэтому мы уверены, что установлен правильный Framework. Мы подозреваем, что в реестре этой машины есть что-то, что просто не удовлетворяет логике зависимостей InstallShield 2009. Что мы делаем дальше?

3 ответа

Решение

Используете ли вы предварительные условия с http://kb.acresso.com/selfservice/viewContent.do?externalID=Q200284 или что-то еще? Если есть предварительные условия, их легко открыть в редакторе необходимых компонентов, чтобы определить, какие ключи реестра или файлы они проверяют.

Как ваш установщик настроен на обнаружение.net 3.5 sp1. Майкл прав в том, что IS будет искать свою версию.net 3.5 sp1 и проверять эту запись в реестре. Вы можете настроить более "общий" ключ для поиска в редакторе необходимых компонентов.

Есть еще один способ проверить.Net Framework. Если ваш проект installshield поддерживает Installscript, то через скрипт вы архивируете это.

с помощью DOTNETFRAMEWORKINSTALLED это предопределенная константа, используемая для представления значения, которое передается или возвращается одной или несколькими встроенными функциями. Вы не можете изменить значение предопределенной константы.

и REGDB_KEYPATH_DOTNET_30 - это предопределенная константа, значением которой является местоположение реестра (не включая корневой ключ) раздела реестра для версии 3.0.NET Framework. Он определяется следующим образом:

** Программное обеспечение \Microsoft\NET Framework\Setup\NDP\v3.0**

Вы не можете изменить значение предопределенной константы. Эту константу можно использовать для указания ключа при вызове общей функции, связанной с реестром. Эта предопределенная константа также поддерживается при использовании функции Is.

например:

function BOOL DetectDotNet20()
        BOOL bStatus;
        STRING PROGRAM;
        NUMBER nWait; 
    begin 
        bStatus = Is(DOTNETFRAMEWORKINSTALLED, REGDB_KEYPATH_DOTNET_20);
        if (bStatus) then
            MessageBox("Dotnet 2.0  is present on the system.", INFORMATION ); 
            bStatus = TRUE;
        else  
            MessageBox("Dotnet 2.0  is not present on the system.", INFORMATION );
        endif; 
        return bStatus;
    end;
Другие вопросы по тегам