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

时间:2022-10-04 22:36:13

On Windows Server 2003 Standard Edition, a customer installed .NET 3.5 SP 1. Whenever we run our installer built with InstallShield 2009, the installer complains that the target machine does not have the .NET 3.5 SP 1 dependency. The customer has uninstalled and reinstalled .NET 3.5 SP 1 a couple of times, rebooting each time, but our installer never detects it. The installer, by the way, works fine everywhere else.

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

To test, we successfully ran one of our apps built with .NET 3.5 SP 1 (it uses LINQ) but does not have an installer. No problems there, so we are confident the correct Framework is installed. We suspect there is something in this machine's registry that just won't satisfy InstallShield 2009's dependency logic. What do we do next?

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

3 个解决方案

#1


1  

Are you using the prerequisites from http://kb.acresso.com/selfservice/viewContent.do?externalID=Q200284 or something else? If the prerequisites, it's easy to open them in the prerequisite editor to identify what registry keys or files they check.

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

#2


0  

How is your installer configured to detect .net 3.5 sp1. Michael is right in that IS will look for it's version of .net 3.5 sp1 and check for that registry entry. You can configure a more 'generic' key to look for in the prerequisite editor.

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

#3


0  

One more way is there that you can check the .Net Framework. If your installshield project supports Installscript then through script you archive this.

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

by using DOTNETFRAMEWORKINSTALLED this is a is a predefined constant used to represent a value that is passed to or returned by one or more built-in functions. You cannot change the value of a predefined constant.

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

and REGDB_KEYPATH_DOTNET_30 this is a predefined constant whose value is the registry location (not including the root key) of the registry key for version 3.0 of the .NET Framework. It is defined as follows:

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

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

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

You cannot change the value of a predefined constant. You can use this constant to specify a key when calling a general registry-related function. This predefined constant is also supported when using the Is function.

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

for example :

例如 :

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;

#1


1  

Are you using the prerequisites from http://kb.acresso.com/selfservice/viewContent.do?externalID=Q200284 or something else? If the prerequisites, it's easy to open them in the prerequisite editor to identify what registry keys or files they check.

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

#2


0  

How is your installer configured to detect .net 3.5 sp1. Michael is right in that IS will look for it's version of .net 3.5 sp1 and check for that registry entry. You can configure a more 'generic' key to look for in the prerequisite editor.

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

#3


0  

One more way is there that you can check the .Net Framework. If your installshield project supports Installscript then through script you archive this.

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

by using DOTNETFRAMEWORKINSTALLED this is a is a predefined constant used to represent a value that is passed to or returned by one or more built-in functions. You cannot change the value of a predefined constant.

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

and REGDB_KEYPATH_DOTNET_30 this is a predefined constant whose value is the registry location (not including the root key) of the registry key for version 3.0 of the .NET Framework. It is defined as follows:

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

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

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

You cannot change the value of a predefined constant. You can use this constant to specify a key when calling a general registry-related function. This predefined constant is also supported when using the Is function.

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

for example :

例如 :

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;