0

在 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 的依赖逻辑。我们接下来要做什么?

4

3 回答 3

1

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

于 2009-08-07T06:18:54.470 回答
0

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

于 2009-08-25T22:44:55.667 回答
0

还有一种方法可以让您检查 .Net Framework。如果您的 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;
于 2009-09-23T10:07:57.477 回答