Почему 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;