É possível usar um OU lógico, ou negar uma condição em Installshield 2012 PRQs?
-
12-12-2019 - |
Pergunta
Eu tenho um PRQ que instala MS SQL Objetos de Gerenciamento Compartilhado.Eu tenho uma condição que instala o PRQ se esta chave de registo não existir
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{08ECC740-2B3E-45D7-860C-59B511386286}
Isso funciona bem até que um usuário tem SMO instalado com um diferente código do produto - isso acontece com a nossa equipe de desenvolvimento o tempo todo quando eles instalar o SQL2008.O instalador a PRQ começa a existir com um erro.
Eu preciso de uma melhor condição.O que eu gostaria de fazer é:Se (Versão <= w.x.y.z || a Versão encontrada) Em seguida, instale PRQ
No InstallShield pré-Requisito editor ele diz
As Seguintes condições devem ser atendidas para que o pré-requisito para executar.Aqui você pode definir arquivos e chaves do registro que o pré-requisito será olhar para determinar se ele deve ser executado.Se não há condições, o pré-requisito será sempre executado.
Isto concorda com as minhas conclusões - as condições estão Concatenadas juntos.Há alguns inéditos molho OU ou negar as condições em XML?Eu estou zangada agora, porque olhando para executar um prq se a versão no registro é < o que eu estou a instalar.
<conditions>
<condition Type="32" Comparison="2"
Path="HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\SharedManagementObjects\CurrentVersion"
FileName="Version" ReturnValue="10.1.2531.0">
</condition>
</conditions>
Tipo="32") é Uma entrada de registo tem um determinado valor de versão' Comparação="2" é "de Dados no sistema de destino é menor do que especificado de dados'
Do lado pergunta:Existe um lugar onde os Tipos e as Comparações são enumerados?
Este tipo de Comparação não tem uma comparação com o estado 'de Dados no sistema de destino é menor que o especificado dados ou não existe'.Como é agora, se a chave existe em uma versão menor que as coisas funcionam - mas, se a chave não existir (por exemplo,SMO não está instalada) o PRQ não está instalado.
Existe uma maneira de fazer este trabalho?O 'Um arquivo com determinados existir uma versão de' condição de não ter um, Se a versão do arquivo é MENOR do QUE a versão especificada acima (ou o arquivo NÃO É ENCONTRADO no sistema de destino) opção.Mas ele não vai funcionar para verificar um arquivo instalado pelo SMO - o usuário pode ter instalado para uma unidade diferente da unidade C:.
Eu estou esperando eu estou faltando alguma coisa.O que você faria?
Solução
O que eu geralmente faço é não usar coisas abstratas como as entradas ARP para detectar a dependência.Eu vou para a dependência em si.Se você precisa de uma DLL, em seguida, veja se a DLL está lá, em vez de se preocupar com a detecção de algo que deveria ter instalada a DLL.