【问题标题】:Why won't InstallShield 2009 detect .NET 3.5 SP 1?为什么 InstallShield 2009 不检测 .NET 3.5 SP 1?
【发布时间】:2009-08-05 18:52:42
【问题描述】:

在 Windows Server 2003 标准版上,客户安装了 .NET 3.5 SP 1。每当我们运行使用 InstallShield 2009 构建的安装程序时,安装程​​序都会抱怨目标计算机没有 .NET 3.5 SP 1 依赖项。客户已多次卸载并重新安装 .NET 3.5 SP 1,每次都重新启动,但我们的安装程序从未检测到它。顺便说一句,安装程序在其他任何地方都可以正常工作。

为了进行测试,我们成功运行了一个使用 .NET 3.5 SP 1(它使用 LINQ)构建的应用程序,但没有安装程序。那里没有问题,所以我们确信安装了正确的框架。我们怀疑这台机器的注册表中有些东西不能满足 InstallShield 2009 的依赖逻辑。我们接下来要做什么?

【问题讨论】:

    标签: .net-3.5 dependencies windows-server-2003 installshield installshield-2009


    【解决方案1】:

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

    【讨论】:

    • 这些密钥存在,因此我们正在使用 InstallShield 解决问题。
    【解决方案2】:

    您的安装程序如何配置为检测 .net 3.5 sp1。 Michael 是对的,IS 将寻找它的 .net 3.5 sp1 版本并检查该注册表项。您可以配置一个更“通用”的密钥,以便在先决条件编辑器中查找。

    【讨论】:

    • 什么是更“通用”的键?
    【解决方案3】:

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

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

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

    **软件\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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 2010-11-25
      相关资源
      最近更新 更多