Por que não vai InstallShield 2009 detectar .NET 3.5 SP 1?
Pergunta
No Windows Server 2003 Standard Edition, um cliente instalado .NET 3.5 SP 1. Sempre que executar o nosso instalador construído com InstallShield 2009, o instalador reclama que a máquina de destino não tem o .NET 3.5 SP 1 dependência. O cliente tem desinstalado e reinstalado .NET 3.5 SP 1 um par de vezes, reiniciando a cada vez, mas o nosso instalador não detecta-lo. O instalador, aliás, funciona bem em qualquer outro lugar.
Para teste, executamos com sucesso um de nossos aplicativos construídos com .NET 3.5 SP 1 (ele usa LINQ), mas não tem um instalador. Não há problemas, por isso estamos confiantes de que o quadro correto está instalado. Nós suspeitamos que há algo no registro desta máquina que só não vai satisfazer lógica dependência InstallShield 2009 é. O que vamos fazer a seguir?
Solução
Você está usando os pré-requisitos de http://kb.acresso.com /selfservice/viewContent.do?externalID=Q200284 ou algo mais? Se os pré-requisitos, é fácil para abri-los no editor de pré-requisito para identificar o que chaves do registro ou arquivos que verificar.
Outras dicas
Como é o seu instalador configurado para detectar NET 3.5 SP1. Michael está certo em que é a vontade de olhar para a versão que do da NET 3.5 SP1 e verificar que a entrada Registro. Você pode configurar uma chave mais 'genérico' para procurar no editor de pré-requisito.
Uma mais maneira é lá que você pode verificar o .Net Framework. Se o seu projeto installshield suporta InstallScript, em seguida, por meio de script de arquivar isso.
usando
e REGDB_KEYPATH_DOTNET_30 esta é uma constante cujo valor pré-definido é o local de registo (não incluindo a chave de raiz) da chave de registo para a versão 3.0 do Framework. Ele é definido da seguinte forma:
** Software \ Microsoft \ NET Framework \ Setup \ NDP \ v3.0 **
Você não pode alterar o valor de uma constante predefinida. Você pode usar essa constante para especificar uma chave ao chamar uma função geral de registro relacionadas. Esta constante predefinida também é suportado ao usar o função é.
Por exemplo:
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;