为什么InstallShield 2009不能检测.NET 3.5 SP 1?

时间:2009-08-05 18:52:42

标签: .net-3.5 dependencies windows-server-2003 installshield installshield-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 个答案:

答案 0 :(得分:1)

您使用的是http://kb.acresso.com/selfservice/viewContent.do?externalID=Q200284或其他内容的先决条件吗?如果是先决条件,可以在先决条件编辑器中轻松打开它们,以确定它们检查的注册表项或文件。

答案 1 :(得分:0)

如何配置安装程序以检测.net 3.5 sp1。迈克尔是正确的,IS将寻找它的.net 3.5 sp1版本并检查该注册表项。您可以在先决条件编辑器中配置更“通用”的键来查找。

答案 2 :(得分:0)

还有一种方法可以检查.Net Framework。如果您的installshield项目支持Installscript,那么通过脚本将其存档。

通过使用 DOTNETFRAMEWORKINSTALLED ,这是一个预定义常量,用于表示传递给一个或多个内置函数或由一个或多个内置函数返回的值。您无法更改预定义常量的值。

和REGDB_KEYPATH_DOTNET_30 这是一个预定义的常量,其值是.NET Framework 3.0版的注册表项的注册表位置(不包括根键)。它的定义如下:

** Software \ Microsoft \ NET Framework \ Setup \ NDP \ v3.0 **

您无法更改预定义常量的值。您可以使用此常量在调用常规注册表相关函数时指定密钥。使用功能时,也支持此预定义常量。

例如:

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;