Esta pregunta no está tanto relacionada con la programación como con la implementación.
Me encuentro conversando mucho con el grupo de mi empresa cuyo trabajo es mantener nuestros servidores de producción de Windows e implementar nuestro código en ellos. Por razones legales y de cumplimiento, no tengo visibilidad directa ni control alguno sobre los servidores, por lo que la única forma de saber qué versiones de .NET están instaladas en cualquiera de ellos es a través de las instrucciones que le doy a ese grupo.
Hasta ahora, todos los métodos que se me ocurren para saber qué versión (s) están instaladas (verifique que las Herramientas administrativas coincidan con 1.1 o 2.0, verifique las entradas en la lista "Agregar o quitar programas", verifique la existencia del directorios en c: \ Windows \ Microsoft.NET) tienen fallas (he visto al menos una máquina con 2.0 pero no 2.0 entradas en Herramientas administrativas, y ese método no le dice nada sobre 3.0+, la lista "Agregar o quitar programas" puede perder la sincronización con la realidad, y la existencia de los directorios no significa necesariamente nada).
Dado que generalmente necesito saber que estas cosas están en su lugar de antemano (descubrir que "uy, este no tiene todas las versiones y paquetes de servicio que necesita" realmente no funciona bien con períodos de mantenimiento cortos) y tengo que Hacer la verificación "por proxy" ya que no puedo acceder a los servidores directamente, ¿cuál es la manera infalible de saber qué versión (s) de .NET están instaladas en un servidor Windows de producción? Preferiblemente, alguna forma intrínseca de hacerlo utilizando lo que instala el marco, ya que será más rápido y no necesitará ningún tipo de utilidad para cargarse y también un método que definitivamente fallará si los marcos no están instalados correctamente pero aún tienen archivos en su lugar (es decir, , hay un directorio y gacutil.exe está insertado allí, pero esa versión del marco no está realmente "instalada")
EDITAR: En ausencia de una buena forma intrínseca infalible de hacer esto incorporada en el marco (s), ¿alguien conoce un programa bueno, liviano y que no requiere instalación que pueda descubrir esto? Me imagino que alguien podría escribir uno fácilmente, pero si ya existe, sería aún mejor.

