views:

761

answers:

3

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.

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?

+1  A: 

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.

Michael Urman
Those keys are present, so we are taking the issue up with InstallShield.
flipdoubt
A: 

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.

eric
What is the more "generic" key?
flipdoubt
A: 

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

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.

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:

*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.

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;
Chetan