2009-01-29 19 views
58

Tengo un conjunto de scripts para realizar instalaciones con script. Puede usar los scripts en cualquier máquina del servidor 2008. Sin embargo, necesito verificar si se ha instalado .NET 3.5 (antes de que se ejecuten los scripts) usando un archivo de dos por lotes. ¿Es eso posible?¿Existe un comando de línea de comando para verificar qué versión de .NET está instalada?

Sé que puedo verificar si existe un archivo en el C:\WINDOWS\Microsoft.NET\Framework\v3.5, pero sería bueno tener algo un poco más confiable.

Me gustaría comprobar si está realmente instalado, no solo si el directorio/archivo existe.

Gracias

Respuesta

13

Lamentablemente, la mejor manera sería buscar ese directorio. No estoy seguro de lo que quiere decir sino de que "realmente está instalado", ya que .NET 3.5 usa el mismo CLR que .NET 3.0 y .NET 2.0, por lo que todas las nuevas funcionalidades se envuelven en ensamblajes nuevos que residen en ese directorio. Básicamente, si el directorio está ahí, entonces 3.5 está instalado.

Lo único que puedo añadir es encontrar el directorio de esta manera para una máxima flexibilidad:

%windir%\Microsoft.NET\Framework\v3.5 
+4

Gracias por la ayuda. Creo que verificar el directorio funcionará bien. Además, gracias por el recordatorio sobre el uso de% windir% –

+5

Esta simple comprobación de directorio ya no es válida para detectar la versión. No hay un directorio v4.5 para .NET Framework 4.5 -http: //stackoverflow.com/questions/12070518/where-is-the-net-framework-4-5-directory – mvark

+0

Vea este artículo de MSDN: [Cómo : Determine qué versiones de .NET Framework están instaladas] (https://msdn.microsoft.com/en-us/library/hh925568 (v = vs.110) .aspx # net_d). Explica que ya no puede confiar solo en el directorio. Para las versiones> = 4.0 necesita analizar el registro. – Matt

5

Usted puede escribir una pequeña aplicación de consola y utilice System.Environment.Version para averiguar la versión. Scott Hanselman da un blog post al respecto.

O busque en el registro las versiones instaladas. HKLM \ Software \ Microsoft \ NETFramework Setup \ NDP

+1

Me encanta - El blog de Hanselman tiene un widget que muestra "En reproducción: Alicia Keys - Si yo fuera tu mujer/Walk On By" vinculado a la tienda de iTunes. : D – dkretz

+0

El único problema es que mis scripts pueden ejecutarse en una vm recién instalada con nada más que el sistema operativo base. Creo que verificar el directorio existente funcionará para lo que necesito. –

+0

Si le importa SP1 versus no SP1, tendrá que utilizar algo más, como verificar el registro. – ajma

4

Si va a ejecutar una pequeña aplicación de consola, también puede instalar clrver.exe desde .NET SDK. No creo que puedas ser más limpio que eso. Esta no es mi respuesta (pero estoy de acuerdo), la encontré here.

16

¿Quiere decir un comando de DOS tal como a continuación, hacer el trabajo que muestra NET marcos instalados:

wmic /namespace:\\root\cimv2 path win32_product where "name like '%%.NET%%'" get version 

El siguiente entonces puede aparecer:

Version 
4.0.30319 

WMIC es muy útil una vez que amo usándolo, mucho más fácil que codificar WMI en scripts dependiendo de lo que quiere lograr.

+2

Intenté este comando, al pie de la letra, pero simplemente colgó allí y se congeló y no respondió –

+0

Aviad, sí, mismo aquí. Solo tienes que esperar. ¡Tardó 3 minutos! –

+0

Wow 3 minutos? ¿Así de largo? Mi máquina virtual lo hizo en aproximadamente 10 segundos. ¿Hay alguna manera de limitarlo a la última versión de instalación y mostrar la ruta a la ubicación en la unidad? – thefoyer

69

Como dijo que desea saber si está realmente instalado, creo que la mejor manera (a excepción del código específico de la versión en ejecución) es verificar la clave de registro llamada "Install". 0x1 significa que sí:

C:\>reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5"| findstr Install 

    Install  REG_DWORD  0x1 
    InstallPath REG_SZ c:\WINNT\Microsoft.NET\Framework\v3.5\ 

Esto también pasa a ser el "Microsoft Recommended" official method.

WMI es otra posibilidad, pero parece poco práctico (¿Lento? Toma 2 min en mi C2D, SSD). Tal vez funcione mejor en su servidor:

C:\>wmic product where "Name like 'Microsoft .Net%'" get Name, Version 

Name            Version 
Microsoft .NET Compact Framework 1.0 SP3 Developer 1.0.4292 
Microsoft .NET Framework 3.0 Service Pack 2   3.2.30729 
Microsoft .NET Framework 3.5 SP1     3.5.30729 
Microsoft .NET Compact Framework 2.0    2.0.5238 
Microsoft .NET Framework 4 Client Profile   4.0.30319 
Microsoft .NET Framework 4 Multi-Targeting Pack  4.0.30319 
Microsoft .NET Framework 2.0 Service Pack 2   2.2.30729 
Microsoft .NET Framework 1.1      1.1.4322 
Microsoft .NET Framework 4 Extended     4.0.30319 

C:\>wmic product where "name like 'Microsoft .N%' and version='3.5.30729'" get name 

Name 
Microsoft .NET Framework 3.5 SP1 

Aparte de estas Creo que la única manera de estar seguro al 100% es realmente ejecutar una aplicación de consola sencilla compilado la orientación de su versión del marco. Personalmente, considero que esto es innecesario y confío plenamente en el método de registro.

Finalmente, puede configurar un sitio de prueba de intranet accesible desde su servidor y olfatear el agente de usuario para determinar las versiones de .NET. Pero eso no es una solución de archivo por lotes, por supuesto.También vea doc here.

+2

Este método no muestra todas las versiones de .NET Framework de GAC. Solo 4.0 en mi caso: * Microsoft .NET Framework 4 Multi-Targeting Pack 4.0.30319 *, * Microsoft .NET Framework 4 Extended 4.0.30320 *, * Microsoft .NET Framework 4 Client Profile 4.0.30320 *. Aunque también están instaladas las versiones 2.0.50727, 3.0.30729.5420, 3.5.30729.5420. – Mosc

+0

¿Qué hay de .NET 4.5? – Kiquenet

+1

Utilizo este para 4.5: consulta reg "HKLM \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Full" | findstr Version –

0

REM Busque el archivo de configuración, si esto no sale entonces el usuario no tiene el marco .Net 2.0 `

SET FileName=%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG 
IF EXIST %FileName% GOTO INSTALL_DIALER 
ECHO.You currently do not have the Microsoft(c) .NET Framework 2.0 installed. 
0

Esto es trabajo para mí:

@echo off 
SETLOCAL ENABLEEXTENSIONS 

echo Verify .Net Framework Version 

for /f "delims=" %%I in ('dir /B /A:D %windir%\Microsoft.NET\Framework') do (
    for /f "usebackq tokens=1,3 delims= " %%A in (`reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\%%I" 2^>nul ^| findstr Install`) do (
     if %%A==Install (
      if %%B==0x1 (
       echo %%I 
      ) 
     ) 
    ) 
) 

echo Do you see version v4.5.2 or greater in the list? 

pause 

ENDLOCAL 

El 2^>nul redirige los errores al vapor.

+2

MS ha dejado de usar la carpeta de registro 'v4.0' a favor de una carpeta 'v4' con un número de versión, como 393297 = 4.6. https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx#net_b – Aaron

0

puede comprobar instalado C# Compiladores y la versión impresa de la .net:

@echo off 

for /r "%SystemRoot%\Microsoft.NET\Framework\" %%# in ("*csc.exe") do (
    set "l=" 
    for /f "skip=1 tokens=2 delims=k" %%$ in ('"%%# #"') do (
     if not defined l (
      echo Installed: %%$ 
      set l=%%$ 
     ) 
    ) 
) 

echo latest installed .NET %l% 

la csc.exe no tiene un modificador -version pero imprime la versión .net en su logotipo. También puedes probar con msbuild.exe pero .NET framework 1. * no tiene msbuild.

Cuestiones relacionadas