ver veo una que programas programa para los las instalados instaladas hago guardan donde desinstalar deja cómo computadora como apps windows registry

windows - veo - programas instalados en una computadora



Detectando programas instalados a través del registro (8)

Parece que buscar algo específico para el programa instalado funcionaría mejor, pero HKCU / Software y HKLM / Software son los lugares para buscar.

Necesito desarrollar un proceso que detecte si la computadora de los usuarios tiene ciertos programas instalados y, de ser así, qué versión. Creo que necesitaré una lista con la ubicación del registro y las claves para buscar y alimentar al programa, que no es un problema. ¿Hay una mejor manera de lograr esto?

Mi primer pensamiento fue verificar el registro en las entradas de desinstalación, pero parece que una de las aplicaciones que deseo detectar no tiene una. ¿Cuál es la ubicación estándar para todas las aplicaciones de registro usando para hacer una entrada?


Puede usar MSI API para enumerar todo lo que instaló Windows Installer, pero eso no mostrará todo el software disponible en una máquina. Sin saber más sobre lo que necesita, creo que el concepto de "instalado" es un poco vago. Hay muchas formas de implementar software en un sistema que va desde instaladores grandes y complicados hasta archivos ZIP y todo lo que se encuentra entre ellos.


Una aplicación no necesita tener ninguna entrada de registro. De hecho, muchas aplicaciones no necesitan ser instaladas en absoluto. Las memorias USB U3 son un buen ejemplo; los programas en ellos solo se ejecutan desde el sistema de archivos.

Como se señaló, la mayoría de las buenas aplicaciones se pueden encontrar a través de su clave de registro de desinstalación. Esto es en realidad un par de claves, por usuario y por máquina (HKCU / HKLM - Piskvor mencionó solo el HKLM). Sin embargo, (no siempre) le da el directorio de instalación.

Si está en HKCU, entonces debes darte cuenta de que HKEY_CURRENT_USER realmente significa "Usuario actual". Otros usuarios tienen sus propias entradas HKCU y su propio software instalado. No puedes encontrar eso. Leer cada colmena HKEY_USERS es un desastre en las redes corporativas con perfiles itinerantes. Realmente no quiere buscar 1000 cuentas desde su oficina remota [US | China | Europa].

Incluso si se instala una aplicación, y usted sabe dónde, puede que no tenga la misma noción de "versión" que tiene. La mejor fuente es el recurso "versión" en los archivos ejecutables. De hecho, es un plural, por lo que debe encontrarlos a todos, extraer recursos de versión de todos y, en caso de conflicto, decidir algo razonable.

Buena suerte. Hay dormideros de formas de fallar.


Win32_Product nunca muestra todo, solo el software instalado a través de un instalador de MSI (hasta donde sé).

Hay muchos paquetes de software que se instalan a través de otros instaladores que no aparecen allí. otra forma es necesaria.


La configuración específica del usuario debe escribirse en HKCU / Software, la configuración específica de la máquina en HKLM / Software. Bajo estas claves, la estructura [software vendor name]/[application name] (p. Ej., HKLM/Software/Microsoft/Internet Explorer ) puede ser la más común, pero eso es solo una convención, no una ley de la naturaleza.

Muchas (¿la mayoría?) Aplicaciones también agregan sus entradas de desinstalación a HKLM/Software/Microsoft/Windows/CurrentVersion/Uninstall/[app name] , pero de nuevo, no todas las aplicaciones hacen esto.

Estas son las claves más importantes; sin embargo, los contenidos del registro no tienen que representar exactamente el software instalado, tal vez la aplicación se instaló una vez, pero luego se eliminó manualmente, o tal vez el desinstalador no eliminó todos los rastros del mismo. Si quiere estar seguro, verifique el sistema de archivos para ver si la aplicación todavía existe donde dicen sus entradas de registro.

Editar:

Si es miembro de los administradores del grupo, puede verificar la sección HKEY_USERS : la HKCU de cada usuario en realidad reside allí (deberá conocer el SID del usuario o ir a través de todos).

Nota: Como dice @Brian Ensink, "instalado" es un concepto un tanto vago: ¿estamos tratando de encontrar lo que el usuario podría ejecutar? Algunos programas ni siquiera escriben en el Registro: busque "aplicaciones portátiles" para ver las aplicaciones que se han modificado específicamente para ejecutarse directamente desde los medios (CD / USB) y no dejar ningún rastro en la computadora. También es posible que tengamos que escanear los discos y los discos de red, y todo lo que el usuario descargue, y las acciones de Windows accesibles a nivel mundial en Internet (sí, tales cosas existen legítimamente, //live.sysinternals.com/tools viene a la mente //live.sysinternals.com/tools ). En esta dirección, no existe un límite real de lo que el usuario puede ejecutar, a menos que las políticas del sistema lo impidan.


Además de todas las claves de registro mencionadas anteriormente, es posible que también tenga que consultar HKEY_CURRENT_USER / Software / Microsoft / Installer / Products para los programas instalados solo para el usuario actual.


En sistemas de 64 bits, la clave x64 es:

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall

La mayoría de los programas están listados allí. Mire las teclas: DisplayVersion

¡Tenga en cuenta que el último no siempre está configurado!

En sistemas de 64 bits, la clave x86 (generalmente con más entradas) es:

HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Windows/CurrentVersion/Uninstall


Puede usar un script de PowerShell para ver los registros y obtener los detalles del programa instalado. El siguiente script generará un archivo con la lista completa de programas instalados. Guárdelo con la extensión ".ps" y haga doble clic en el archivo.

# # Generates a full list of installed programs. # # Temporary auxiliar file. $tmpFile = "tmp.txt" # File that will hold the programs list. $fileName = "programas-instalados.txt" # Columns separator. $separator = "," # Delete previous files. Remove-Item $tmpFile Remove-Item $fileName # Creates the temporary file. Create-Item $tmpFile # Searchs register for programs - part 1 $loc = Get-ChildItem HKLM:/Software/Microsoft/Windows/CurrentVersion/Uninstall $names = $loc |foreach-object {Get-ItemProperty $_.PsPath} foreach ($name in $names) { IF(-Not [string]::IsNullOrEmpty($name.DisplayName)) { $line = $name.DisplayName+$separator+$name.DisplayVersion+$separator+$name.InstallDate Write-Host $line Add-Content $tmpFile "$line`n" } } # Searchs register for programs - part 2 $loc = Get-ChildItem HKLM:/Software/Wow6432Node/Microsoft/Windows/CurrentVersion/Uninstall $names = $loc |foreach-object {Get-ItemProperty $_.PsPath} foreach ($name in $names) { IF(-Not [string]::IsNullOrEmpty($name.DisplayName)) { $line = $name.DisplayName+$separator+$name.DisplayVersion+$separator+$name.InstallDate Write-Host $line Add-Content $tmpFile "$line`n" } } # Sorts the result, removes duplicate lines and # generates the final file. gc $tmpFile | sort | get-unique > $filename