Esta questão não está muito relacionada à programação, mas à implantação.
Pego-me conversando muito com o grupo em minha empresa cujo trabalho é manter nossos servidores Windows de produção e implantar nosso código neles. Por motivos legais e de conformidade, não tenho visibilidade direta ou qualquer controle sobre os servidores, então a única maneira de saber quais versões do .NET estão instaladas em qualquer um deles é por meio de instruções que dou a esse grupo.
Até agora, todos os métodos que posso pensar para dizer quais versões estão instaladas (verifique se há ferramentas administrativas correspondentes a 1.1 ou 2.0, verifique as entradas na lista "Adicionar / remover programas", verifique a existência de diretórios em c: \ Windows \ Microsoft.NET) são falhos (eu vi pelo menos uma máquina com 2.0, mas nenhuma entrada 2.0 em Ferramentas Administrativas - e esse método não diz nada sobre 3.0+, a lista "Adicionar / Remover Programas" pode ficar fora de sincronia com a realidade, e a existência dos diretórios não significa necessariamente nada).
Dado que geralmente preciso saber que essas coisas estão em vigor com antecedência (descobrir que "opa, este não tem todas as versões e service packs de que você precisa" não funciona bem com janelas de manutenção curtas) e eu tenho que faço a verificação "por proxy", já que não consigo acessar os servidores diretamente, qual é a maneira infalível de saber quais versões do .NET estão instaladas em um Windows Server de produção? De preferência, alguma maneira intrínseca de fazer isso usando o que o framework instala, já que será mais rápido e não precisará de algum tipo de utilitário para ser carregado e também um método que definitivamente irá falhar se os frameworks não estiverem instalados corretamente, mas ainda tiverem arquivos no lugar , há um diretório e gacutil.exe está localizado lá, mas essa versão da estrutura não está realmente "instalada")
EDITAR: Na ausência de uma boa maneira intrínseca à prova de falhas para fazer isso embutido no (s) Framework (s), alguém conhece um programa bom, leve e sem instalação necessária que possa descobrir isso? Posso imaginar que alguém poderia escrever um facilmente, mas se já existir, seria ainda melhor.