WMI" instalado " consulta diferente de agregar / quitar programas lista?


Intentando usar WMI para obtener una lista de programas instalados para Windows XP. Usando wmic, intenté:

wmic /output:c:\ProgramList.txt product get name,version

Y obtengo una lista de muchos de los programas instalados, pero después de borrar esta lista contra lo que muestra "Agregar/Quitar Programas", veo muchos más programas listados en la GUI de Agregar/Quitar Programas que con la consulta WMI. ¿Hay otra consulta WMI que deba usar para instalar el resto de los programas? ¿O hay algún otro lugar que necesito para buscar el ¿descansar?

Además, hay dos programas instalados que se enumeran en la consulta WMI que no están en Agregar/Quitar programas. ¿Alguna idea de por qué?

Author: Moshe Katz, 2009-03-23

12 answers

Creo que su sintaxis está usando la clase Win32_Product en WMI. Una causa es que esta clase solo muestra productos instalados usando Windows Installer ( Ver aquí). La clave de registro de desinstalación es su mejor opción. Aquí está algún código para monitorear la clave del registro.

ACTUALIZACIÓN PARA COMENTARIOS:

La Clave de registro de desinstalación es el lugar estándar para enumerar lo que está instalado y lo que no está instalado. Es la ubicación en la que la lista Agregar / Quitar programas úselo para rellenar la lista de aplicaciones. Estoy seguro de que hay aplicaciones que no se enumeran en esta ubicación. En ese caso, tendría que recurrir a otro método más grosero, como buscar en el directorio de Archivos de programa o buscar en la Lista de Programas del Menú Inicio. Ambas formas definitivamente no son ideales.

En mi opinión, mirar la clave del registro es el mejor método.

 27
Author: Rob Haupt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-23 14:20:56

Todo lo que Agregar / Quitar programas realmente está haciendo es leer esta clave del Registro:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
 13
Author: BobbyShaftoe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-19 13:03:15

Además de la clave de registro más conocida para los programas instalados:

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall

El comando Wmic y los programas add/remove también consultan otra clave del registro:

HKEY_CLASSES_ROOT \ Installer \ Products

El nombre del software que se muestra en la lista se lee a partir del Valor de una entrada de datos dentro de esta clave llamada: ProductName

Eliminar la clave de registro de un determinado producto desde ambas ubicaciones anteriores evitará que se muestre en la lista agregar / eliminar programas. Este no es un método para desinstalar programas, solo eliminará la entrada de lo que Windows conoce como software instalado.

Dado que, al usar este método, perdería la oportunidad de usar el botón Eliminar de la lista agregar/eliminar para eliminar limpiamente el software de su sistema; se recomienda exportar las claves del registro a un archivo antes de eliminarlas. En el futuro, si usted decidió traer ese elemento de vuelta a la lista, simplemente ejecutaría el archivo de registro que almacenó.

 7
Author: saalehr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-07 16:55:09

He estado usando Inno Setup para un instalador. Estoy usando Windows 7 de 64 bits solamente. Estoy encontrando que las entradas del registro se están escribiendo a

HKEY_LOCAL_MACHINE \ SOFTWARE\Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall

Todavía no he descubierto cómo obtener esta lista para ser reportado por WMI (aunque el programa aparece como instalado en Programas y Características). Si lo averiguo, trataré de recordar informar aqui.

ACTUALIZACIÓN:

Las entradas para programas de 32 bits instalados en una máquina de 64 bits van en esa ubicación de registro. Hay más escrito aquí:

Http://mdb-blog.blogspot.com/2010/09/c-check-if-programapplication-is.html

Ver mi comentario que describe el comportamiento de 32 bits vs 64 bits en ese mismo post aquí:

Http://mdb-blog.blogspot.com/2010/09/c-check-if-programapplication-is.html?showComment=1300402090679#c861009270784046894

Desafortunadamente, no parece haber una manera de conseguir que WMI enumere todos los programas de la lista agregar/quitar programas (también conocidos como Programas y características en Windows 7, no estoy seguro de Vista). Mi código actual ha abandonado WMI a favor de usar el registro. El código en sí para interrogar al registro es incluso más fácil que usar WMI. Código de ejemplo está en el enlace anterior.

 5
Author: Tyler Collier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-17 22:55:15

No es el mejor, pero si es método práctico:

Use HijackThis.

Ejecute secuestrar esto, haga clic en el botón" Abrir la sección de herramientas Misceláneas "

HijackThis Menú principal

Haga clic en"Abrir Administrador de desinstalación"

HijackThis Configuración

Haga clic en guardar lista (*.txt), sí a las indicaciones, el bloc de notas se abrirá con su lista de agregar / eliminar programas.

HijackThis Agregar / Quitar Administrador de Programas


Fuente

 4
Author: quantme,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-22 08:54:39

Los productos instalados consisten en elementos y características de software instalados, por lo que vale la pena verificar los alias de wmic para el PRODUCTO, así como verificar SOFTWAREELEMENT y SOFTWAREFEATURE:

wmic product get name,version

wmic softwareelement get name,version

wmic softwarefeature get name,version
 2
Author: MacG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-18 05:15:52

Puede usar el script desde http://technet.microsoft.com/en-us/library/ee692772.aspx#EBAA para acceder al registro y listar aplicaciones usando WMI.

 2
Author: motobói,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-24 18:52:43

Para construir una lista más o menos confiable de las aplicaciones que aparecen en los "Programas y Feautres" en el Panel de Control, hay que tener en cuenta que no todas las aplicaciones se instalaron usando MSI. WMI solo proporciona los instalados con MSI.

Aquí hay un breve resumen de lo que he descubierto:

Las aplicaciones MSI siempre tienen una subclave de Código de producto (GUID) bajo HKLM\...\Uninstall y/o bajo HKLM\...\Installer\UserData\S-1-5-18\Products. Además, pueden tener una clave que se parece a HKLM\...\Uninstall\NotAGuid.

Las aplicaciones que no son MSI no tienen un código de producto, y por lo tanto tienen claves como HKLM\...\Uninstall\NotAGuid o HKCU\...\Uninstall\NotAGuid.

 1
Author: Ilya Kogan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-19 07:57:04

Add / Remove Programs también tiene que buscar en esta clave de registro para encontrar instalaciones para el usuario actual:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall

Aplicaciones como Google Chrome, Dropbox, o accesos directos instalados a través de JavaWS (web start) JNLPs se pueden encontrar solo aquí.

 0
Author: candritzky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-07 07:55:23

Adapté el MS-Technet VBScript para mis necesidades. Vuelca Wow6432Node así como entradas estándar en " programms.txt" Utilizarlo bajo su propio riesgo, no hay garantía!

Guardar como volcado.vbs

Desde la línea de comandos escriba: wscript dump.vbs

Const HKLM = &H80000002
Set objReg = GetObject("winmgmts://" & "." & "/root/default:StdRegProv")
Set objFSO = CreateObject("Scripting.FileSystemObject")

outFile="programms.txt"

Set objFile = objFSO.CreateTextFile(outFile,True)
writeList "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\", objReg, objFile
writeList "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\", objReg, objFile
objFile.Close 

Function writeList(strBaseKey, objReg, objFile) 
objReg.EnumKey HKLM, strBaseKey, arrSubKeys 
    For Each strSubKey In arrSubKeys
        intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, "DisplayName", strValue)
        If intRet <> 0 Then
            intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, "QuietDisplayName", strValue)
        End If
        objReg.GetStringValue HKLM, strBaseKey & strSubKey, "DisplayVersion", version
        objReg.GetStringValue HKLM, strBaseKey & strSubKey, "InstallDate", insDate 
        If (strValue <> "") and (intRet = 0) Then
            objFile.Write strValue & "," & version & "," & insDate & vbCrLf
        End If
    Next
End Function
 0
Author: seizu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-24 19:47:59

Puede obtenerlo en una línea con powershell y batch file:

@echo off
Powershell /command "Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-List"
Pause
 0
Author: Hackoo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-23 07:05:12

Espero que esto ayude a alguien: He estado usando la enumeración basada en el registro en mis scripts (como sugieren algunas de las respuestas anteriores), pero he encontrado que no enumera correctamente el software de 64 bits cuando se ejecuta en Windows 10 x64 a través de SCCM (que utiliza un cliente de 32 bits). Encontré algo como esto para ser la solución más sencilla en mi caso particular:

Function Get-Programs($Bits) {
  $Result = @()
  $Output = (reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall /reg:$Bits /s)

  Foreach ($Line in $Output) {
    If ($Line -match '^\s+DisplayName\s+REG_SZ\s+(.+?)$') {
      $Result += New-Object PSObject -Property @{
        DisplayName = $matches[1];
        Bits = "$($Bits)-bit";
      }
    }
  }

  $Result
}

$Software  = Get-Programs 32
$Software += Get-Programs 64

Darse cuenta de que esto es un poco demasiado Perl-ish en una mala manera, pero todas las otras alternativas que he visto involucraron locura con wrapper scripts y similares clever-soluciones inteligentes, y esto parece un poco más humano.

P.d. Tratando muy duro para abstenerse de verter una tonelada de sal en Microsoft aquí para hacer una cosa absolutamente trivial al lado de imposible. Es decir, enumerar todas las versiones de MS Office en uso en una red es una tarea para hacer llorar a un hombre adulto.

 0
Author: Daibhi O Domhnaill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-24 08:54:49