Почему InstallShield 2009 не обнаруживает .NET 3.5 SP 1? - PullRequest
0 голосов
/ 05 августа 2009

В 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 ]

1 голос
/ 07 августа 2009

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

0 голосов
/ 23 сентября 2009

Есть еще один способ проверить .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;
0 голосов
/ 26 августа 2009

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

...