Pergunta

Eu estou criando um programa de instalação do projeto em minha solução usando o WiX 3.8.Como parte deste instalar eu criar algumas condições de lançamento, um dos quais é a verificação de que a Microsoft .NET Framework 4.5.1 está instalado.

Para fazer isso eu quero usar algumas das propriedades no WixNetFxExtension lib que parecem funcionar bem para versões mais antigas .NET framework.Aí está um exemplo de como fazer isso em http://wixtoolset.org/documentation/manual/v3/howtos/redistributables_and_install_checks/check_for_dotnet.html Isso não funciona .NET 4.5.1 no entanto, como não há NETFRAMEWORK451 propriedade para verificar.

Observando o código fonte para o NetFx451.wxs módulo (http://wix.codeplex.com/SourceControl/latest#src/ext/NetFxExtension/wixlib/NetFx451.wxs) parece que não há nenhuma propriedade separada para usar para .NET 4.5.1, mas em vez disso, ele também usa o mesmo NETFRAMEWORK45.Como eu a entendo, v4.5.1 é uma atualização in-loco para v4.5, portanto, ele usa as mesmas chaves de registo (eu acho).De qualquer maneira, neste módulo, eles simplesmente verificar o número de versão retornado de NETFRAMEWORK45 da seguinte forma:

DetectCondition="NETFRAMEWORK45 >= $(var.NetFx451MinRelease)"

Então eu achava que eu poderia escrever uma doença como o seguinte:

    <PropertyRef Id="NETFRAMEWORK45" />
    <Condition Message="The .NET Framework 4.5.1 was not found.  Stopping installation.">
       <![CDATA[Installed OR (NETFRAMEWORK45 >= 378675)]]>
    </Condition>

Mas, este retornou a mensagem de erro em uma máquina que eu sei que tem .NET Framework 4.5.1 instalado.Então, eu criei uma condição como esta para que eu pudesse apenas ver o número de versão que está sendo retornado do registro:

    <PropertyRef Id="NETFRAMEWORK45" />
    <Condition Message ="[NETFRAMEWORK45]">0</Condition>

Isso mostra uma caixa de mensagem com o seguinte texto:#378758 Então, eu sei que o valor do registo está correcto.

Então, eu estou um pouco confuso porque a minha condição de falha.Há algo de óbvio que eu estou em falta aqui, ou há alguma outra maneira de comparar o valor na condição de elemento?

Aqui está a correção para incluir o símbolo de hash, como sugerido por PhilDW:

    <PropertyRef Id="NETFRAMEWORK45" />
    <Condition Message="The .NET Framework 4.5.1 was not found.  Stopping installation.">
      <![CDATA[Installed OR (NETFRAMEWORK45 >= "#378675")]]>
    </Condition>
Foi útil?

Solução

Você está incluindo esse # na comparação, isso não vai ajudar.Você já tentou incluir o # na sua comparação do CDATA?

Eu suporia que, quando o Microsoft People publicou exemplos para detectar versões de estrutura, ele não pode ser feito com um simples registrysearch em um arquivo MSI.

http://blogs.msdn.com/B / Astebner / Arquivo / 2013/10/17 / 10457758.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top