0

在Windows Server 2003 Standard Edition上,客戶安裝了.NET 3.5 SP 1.每當我們運行使用InstallShield 2009構建的安裝程序時,安裝程​​序都會抱怨目標機器不具有.NET 3.5 SP 1依賴項。客戶已經卸載並重新安裝了.NET 3.5 SP 1幾次,每次都重新啓動,但我們的安裝程序從未檢測到它。順便說一下,安裝程序在其他地方都能正常工作。爲什麼InstallShield 2009檢測不到.NET 3.5 SP 1?

爲了測試,我們成功運行了使用.NET 3.5 SP 1(它使用LINQ)構建的應用程序之一,但沒有安裝程序。那裏沒有問題,所以我們有信心安裝正確的框架。我們懷疑這臺機器的註冊表中有些東西不能滿足InstallShield 2009的依賴性邏輯。我們接下來要做什麼?

回答

0

您的安裝程序如何配置爲檢測.net 3.5 sp1。邁克爾是對的,因爲IS會查找它的.net 3.5 sp1版本並檢查該註冊表項。您可以在先決條件編輯器中配置更多「通用」鍵以查找。

+0

什麼是「通用」鍵? – flipdoubt 2009-08-26 11:20:02

0

還有一種方法可以檢查.Net框架。如果您的installshield項目支持Installscript,那麼通過腳本將其歸檔。

使用DOTNETFRAMEWORKINSTALLED這是一個預定義的常量,用於表示傳遞給一個或多個內置函數或由其返回的值。您不能更改預定義常量的值。

和REGDB_KEYPATH_DOTNET_30 這是一個預定的常數,其值是在.NET Framework 3.0版的註冊表項的註冊表位置(不包括根密鑰)。它的定義如下:

**軟件\微軟\ NET框架\ 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;