В реестре в разделах
HKLM\Software\Micros
и
HKCU\Software\Micros
Также на 64-разрядных системах сведения о 32-разрядных программах в разделах
HKLM\SOFTWARE\Wow643
HKCU\SOFTWARE\Wow643
(HKLM и HKCU — сокращения от HKEY_LOCAL_MACHINE и HKEY_CURRENT_USER.)
Можете поискать в Интернет по запросам «Microsoft\Windows\C
If you find that unwanted programs appear on the Programs and Features page even though you have removed/uninstalled them, or if you are unable to uninstall a specific program, then the program has likely been corrupted and it cannot be removed the conventional way.
Using the Windows Registry, you can permanently uninstall programs and apps to ensure that they do not cause further problems.
Table of Contents
In some cases, you might have uninstalled a program through Add/Remove Program, but it still appears in the Control Panel (Run >> appwiz.cpl) list. If you try to run the program, it will not work either. It is best to attempt to remove it using the methods discussed in this post if that is the case.
Program location in Windows Registry
Each program has either a 32-Bit or 64-Bit architecture on your Windows computer. These categories of programs and apps are stored separately, both on the volume and within the Windows Registry.
The 32-bit applications and programs are stored in the following locations:
System Volume: C:\Program Files (x86)
Windows Registry: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\
64-bit apps and programs are saved at the following locations:
System Volume: C:\Program Files
Windows Registry: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
The CurrentVersion keys further hold sub-keys for different apps and programs. One of the sub-keys is named Uninstall, which contains information pertaining to removing the program.
The values within the Uninstall key can be used to remove the entire program permanently from your computer, which is how we shall be deleting any program(s) that may be causing trouble, or are no longer required.
Uninstall Windows Registry key
Before we proceed to the uninstallation process, let us learn how to determine which key belongs to which program, since most sub-keys in the Uninstall key are not named directly with the associated program’s name.
If you click on the key under Uninstall, you may find the following parameters (values) and the related information:
Note: These are common values. You may see come across some values that are not mentioned in the list below.
- DisplayName
- DisplayVersion
- Publisher
- VersionMinor
- VersionMajor
- Version
- HelpLink
- HelpTelephone
- InstallDate
- InstallLocation
- InstallSource
- URLInfoAbout
- URLUpdateInfo
- AuthorizedCDFPrefix
- Comments
- Contact
- EstimatedSize
- Language
- ModifyPath
- Readme
- QuietUninstallString
- UninstallString
- SettingsIdentifier
The only parameters you should be interested in are DisplayName, QuietUninstallString, and UninstallString.
DisplayName is the identifier that will assist you to recognize to which program the key in the Windows Registry belongs. This means that you will need to click on each key before determining which key is the one that you wish to delete.
Note: Some Windows Registries may be named (correctly) after the associated program.
The values QuietUninstallString and UninstallString will be used in the process of uninstalling the program further down the article.
We can now begin to remove the program that you want to.
Uninstall/Remove programs using Windows Registry
You can uninstall the program through the Windows Registry if you are unable to do so through the program itself, or through the Programs and Features page in the Control Panel.
However, if you simply see a program on the Programs and Features page that is no longer installed but still visible, you can delete the associated Windows Registries to remove it from the list.
Since both processes involve manipulation of the Windows Registry, it is better to create a restore point before proceeding forward, in case the system is at risk of wrongful Registry manipulation.
Completely uninstall the program using Windows Registry
Since the names of the keys in the Windows Registry are ambiguous, it is better to create a backup of the Registry, and then proceed towards the uninstallation.
Here is how to do so:
- Launch the Registry Editor by typing in regedit in Run.
- Now paste the complete location of the Uninstall key in the address bar for quick navigation:
- 32-Bit:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall - 64-Bit:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
- 32-Bit:
- Now look for the key that you want to remove. Remember that you can find the name of the associated program in the DisplayName value.
- When found, right-click on the key and click Export from the context menu.
- In the pop-up window, select a location to save the backup Registry file, enter the name of your choice, and click Save.
A local backup of the Windows Registry that you are about to remove has been made.
- Now, click on the associated key of the program that you want to remove, and then double-click on either of the values in the right-hand pane:
- QuietUninstallString – For quietly removing the program (no prompts or confirmation)
- UninstallString – To remove the program with complete due process
- In the Edit String popup, copy the Value Data.
- Now launch the Command Prompt with administrative privileges, paste the copied content and press Enter to run it.
- If you selected UninstallString in step 6, then you may encounter some confirmation dialog boxes or an uninstall/reinstallation wizard. Follow through with them to remove the program.
- Now confirm if the correct program has been removed through the Programs and Features page in the Control Panel. If so, you can continue to delete the manual backup of the Registry as well. If not, you may want to restore the Registry file by double-clicking it. This will bring back the deleted Windows Registry as it was before.
You will now have successfully removed the program and all of its Registries as well.
Remove programs using Windows Registry
Note: This process does not uninstall the program, but simply removes it from the list under the Programs and Features page in the Control Panel.
Perform the following steps to remove a program that no longer works on your Windows computer, but is still visible in the Programs and Features list.
- Open the Registry Editor by typing in regedit in Run, and then paste either of the following locations in the address bar for quick navigation:
- 32-Bit:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall - 64-Bit:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
- 32-Bit:
- Now determine the key associated with the program that you wish to remove from the list by checking the DisplayName value.
- Once determined, right-click the key and then click Delete from the context menu.
- In the confirmation dialog box, click Yes.
- You can now confirm that the program is no longer visible in the Programs and Features page (Run >> appwiz.cpl).
Verdict
You can run either the UninstallString‘s or QuiteUninstallString‘s value in the Command Prompt when you want to uninstall a program. QuietUninstallString will simply remove the program without confirming with you.
Moreover, we would advise that you adopt these methods when no other method to remove a program has worked since manually working with the Windows Registries can turn out to be deadly for your operating system.
Windows keeps track of installed software, and to manually list, change, or uninstall, simply run this command:
This opens the graphical wizard, and you can click the task.
But how would you automate this, and where do you find the listed information, i.e. to create software reports, or test whether a given software is installed or not?
Reading Installed Software From Registry
The information about installed software is stored in the Windows Registry in four different places, and it is almost trivial for PowerShell to read this:
# read all child keys (*) from all four locations and do not emit
# errors if one of these keys does not exist:
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKCU:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' -ErrorAction Ignore |
# list only items with a displayname:
Where-Object DisplayName |
# show these registry values per item:
Select-Object -Property DisplayName, DisplayVersion, UninstallString, InstallDate |
# sort by displayname:
Sort-Object -Property DisplayName
The result looks similar to this:
DisplayName DisplayVersion UninstallString InstallDate
----------- -------------- --------------- -----------
64 Bit HP CIO Components Installer 22.2.1 MsiExec.exe /I{50229C72-539F-4E65-BEB5-F0491C5074B7} 20190907
7-Zip 19.00 (x64) 19.00 C:\Program Files\7-Zip\Uninstall.exe
Actipro WPF Controls 2017.2 17.2.0661 MsiExec.exe /I{DB4F94C0-D62F-41ED-81B9-078CDF246C5B} 20190909
Active Directory Authentication Library für SQL Server 15.0.1300.359 MsiExec.exe /I{088DDE47-955D-406C-848F-C1531DF2E049} 20190903
Adobe Acrobat Reader DC - Deutsch 20.006.20042 MsiExec.exe /I{AC76BA86-7AD7-1031-7B44-AC0F074E4100} 20200319
...
The bulk load is done by Get-ItemProperty
: this cmdlet can read from multiple registry keys, and when you specify a “*”, it automatically traverses all child keys.
Create Excel Report: Installed Software
If you’d rather like to produce an excel list, first make sure you have installed the awesome (and free) module ImportExcel:
Install-Module -Name ImportExcel -Scope CurrentUser
Next, pipe the results to Export-Excel
, and you are done:
# read all child keys (*) from all four locations and do not emit
# errors if one of these keys does not exist:
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKCU:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' -ErrorAction Ignore |
# list only items with a displayname:
Where-Object DisplayName |
# show these registry values per item:
Select-Object -Property DisplayName, DisplayVersion, UninstallString, InstallDate |
# sort by displayname:
Sort-Object -Property DisplayName |
# export results to excel
Export-Excel
Implementation: Get-Software
Let’s bake this finding into a PowerShell function and add all the bells and whistles that make it a really useful and reusable command:
- Add a built-in filter so you can quickly search for a given software
- Add information about the architecture (64-Bit or 32-Bit), and the scope (installed for current user or all users)
- Add a property filter so PowerShell shows only a few most commonly used properties by default
function Get-Software
{
<#
.SYNOPSIS
Reads installed software from registry
.PARAMETER DisplayName
Name or part of name of the software you are looking for
.EXAMPLE
Get-Software -DisplayName *Office*
returns all software with "Office" anywhere in its name
#>
param
(
# emit only software that matches the value you submit:
[string]
$DisplayName = '*'
)
#region define friendly texts:
$Scopes = @{
HKLM = 'All Users'
HKCU = 'Current User'
}
$Architectures = @{
$true = '32-Bit'
$false = '64-Bit'
}
#endregion
#region define calculated custom properties:
# add the scope of the software based on whether the key is located
# in HKLM: or HKCU:
$Scope = @{
Name = 'Scope'
Expression = {
$Scopes[$_.PSDrive.Name]
}
}
# add architecture (32- or 64-bit) based on whether the registry key
# contains the parent key WOW6432Node:
$Architecture = @{
Name = 'Architecture'
Expression = {$Architectures[$_.PSParentPath -like '*\WOW6432Node\*']}
}
#endregion
#region define the properties (registry values) we are after
# define the registry values that you want to include into the result:
$Values = 'AuthorizedCDFPrefix',
'Comments',
'Contact',
'DisplayName',
'DisplayVersion',
'EstimatedSize',
'HelpLink',
'HelpTelephone',
'InstallDate',
'InstallLocation',
'InstallSource',
'Language',
'ModifyPath',
'NoModify',
'PSChildName',
'PSDrive',
'PSParentPath',
'PSPath',
'PSProvider',
'Publisher',
'Readme',
'Size',
'SystemComponent',
'UninstallString',
'URLInfoAbout',
'URLUpdateInfo',
'Version',
'VersionMajor',
'VersionMinor',
'WindowsInstaller',
'Scope',
'Architecture'
#endregion
#region Define the VISIBLE properties
# define the properties that should be visible by default
# keep this below 5 to produce table output:
[string[]]$visible = 'DisplayName','DisplayVersion','Scope','Architecture'
[Management.Automation.PSMemberInfo[]]$visibleProperties = [System.Management.Automation.PSPropertySet]::new('DefaultDisplayPropertySet',$visible)
#endregion
#region read software from all four keys in Windows Registry:
# read all four locations where software can be registered, and ignore non-existing keys:
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKCU:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' -ErrorAction Ignore |
# exclude items with no DisplayName:
Where-Object DisplayName |
# include only items that match the user filter:
Where-Object { $_.DisplayName -like $DisplayName } |
# add the two calculated properties defined earlier:
Select-Object -Property *, $Scope, $Architecture |
# create final objects with all properties we want:
Select-Object -Property $values |
# sort by name, then scope, then architecture:
Sort-Object -Property DisplayName, Scope, Architecture |
# add the property PSStandardMembers so PowerShell knows which properties to
# display by default:
Add-Member -MemberType MemberSet -Name PSStandardMembers -Value $visibleProperties -PassThru
#endregion
}
There are plenty of learning points:
Showing Only Few Default Properties
When you run Get-Software
, only four properties are displayed by default, producing a nice and clean table output:
DisplayName DisplayVersion Scope Architecture
----------- -------------- ----- ------------
64 Bit HP CIO Components Installer 22.2.1 All Users 64-Bit
7-Zip 19.00 (x64) 19.00 All Users 64-Bit
Actipro WPF Controls 2017.2 17.2.0661 All Users 32-Bit
Active Directory Authentication Library für SQL Server 15.0.1300.359 All Users 64-Bit
Adobe Acrobat Reader DC - Deutsch 20.006.20042 All Users 32-Bit
Still, you can display any property you want when you add Select-Object
:
Get-Software | Select-Object -Property *
AuthorizedCDFPrefix :
Comments :
Contact :
DisplayName : 64 Bit HP CIO Components Installer
DisplayVersion : 22.2.1
EstimatedSize : 845
HelpLink :
HelpTelephone :
InstallDate : 20190907
InstallLocation :
InstallSource : C:\Windows\system32\spool\DRIVERS\x64\3\
Language : 1033
ModifyPath : MsiExec.exe /I{50229C72-539F-4E65-BEB5-F0491C5074B7}
NoModify :
PSChildName : {50229C72-539F-4E65-BEB5-F0491C5074B7}
PSDrive : HKLM
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{50229C72-539F-4E65-BEB5-F0491C5074B7}
PSProvider : Microsoft.PowerShell.Core\Registry
Publisher : HP Inc.
Readme :
Size :
SystemComponent : 1
UninstallString : MsiExec.exe /I{50229C72-539F-4E65-BEB5-F0491C5074B7}
URLInfoAbout :
URLUpdateInfo :
Version : 369229825
VersionMajor : 22
VersionMinor : 2
WindowsInstaller : 1
Scope : All Users
Architecture : 64-Bit
...
If you’d like to get more information on the techniques used to define the default properties, here are all the details.
Custom Filtering
Rather than leaving it to the user to add Where-Object
for custom filtering, the function sports the filter property -DisplayName that is named after the property it filters, so now it is simply to list exactly the software you are after:
Get-Software -DisplayName *Office*
DisplayName DisplayVersion Scope Architecture
----------- -------------- ----- ------------
Microsoft Office Professional Plus 2016 - de-de 16.0.12527.20278 All Users 64-Bit
Microsoft Office Professional Plus 2016 - en-us 16.0.12527.20278 All Users 64-Bit
Microsoft Visual Studio 2010 Tools for Office Runtime (x64) 10.0.60724 All Users 64-Bit
Microsoft Visual Studio 2010 Tools for Office Runtime (x64) 10.0.60729 All Users 64-Bit
Office 16 Click-to-Run Extensibility Component 16.0.12527.20278 All Users 32-Bit
Office 16 Click-to-Run Extensibility Component 64-bit Registration 16.0.12527.20278 All Users 64-Bit
Office 16 Click-to-Run Licensing Component 16.0.12527.20278 All Users 64-Bit
Office 16 Click-to-Run Localization Component 16.0.12527.20278 All Users 32-Bit
Office 16 Click-to-Run Localization Component 16.0.12527.20278 All Users 32-Bit
And since the output still contains all properties, you can create custom lists and include non-default properties when needed:
Get-Software -DisplayName *Office* | Select-Object -Property DisplayName, InstallSource
DisplayName InstallSource
----------- -------------
Microsoft Office Professional Plus 2016 - de-de
Microsoft Office Professional Plus 2016 - en-us
Microsoft Visual Studio 2010 Tools for Office Runtime (x64)
Microsoft Visual Studio 2010 Tools for Office Runtime (x64) c:\f3c1e4cb1e6fd583dbd7441e\
Office 16 Click-to-Run Extensibility Component c:\program files (x86)\microsoft office\root\integration\
Office 16 Click-to-Run Extensibility Component 64-bit Registration c:\program files (x86)\microsoft office\root\integration\
Office 16 Click-to-Run Licensing Component c:\program files (x86)\microsoft office\root\integration\
Office 16 Click-to-Run Localization Component c:\program files (x86)\microsoft office\root\integration\
Office 16 Click-to-Run Localization Component c:\program files (x86)\microsoft office\root\integration\
Calculated Properties
Thanks to calculated properties, the output includes important information about architecture and scope. These properties weren’t available in the registry and have been calculated based on the location of the registry keys.
Fine-Tuning Returned Properties
Get-Software
returns all registry values available. You can look up the details of the registry values here.
If you don’t need some of the information, i.e. AuthorizedCDFPrefix, or find that this information is always empty for you, simply remove the property from the list in $values
and tailor the output to your needs.
Maybe you are wondering why
Get-Software
usesSelect-Object
twice, and why I chose to hard-code the properties. Here is why:The first instance of
Select-Object
includes all properties, plus it adds the new calculated properties:# add the two calculated properties defined earlier: Select-Object -Property *, $Scope, $Architecture |
The second instance of
Select-Object
defines the final properties returned. This is crucial because not every registry key contains all of these values. PowerShell uses the properties of the first returned object to calculate tabular headers, so if by accident the first read software item had defined no or not all of the common registry values, PowerShell would not show the remaining values for any of the software items.By hard-coding the property names you are after, you guarantee that they be visible because
Select-Object
actually always clones objects and produces new objects with the properties you chose. This way, these new objects are guaranteed to have these properties, even if they are empty.
В случае, если в списке установленных программ в «Программы и компоненты» Windows у вас присутствуют программы, которые уже были удалены или в ситуации, когда вам нужно, чтобы какая-то программа не отображалась там, вы можете легко убрать её оттуда.
В этой инструкции два способа удалить программу из списка установленных в Windows 11, Windows 10 или предыдущих версиях системы — вручную в редакторе реестра и с помощью стороннего ПО.
Удаление пункта в списке установленных программ с помощью редактора реестра
Информация о том, какие программы были установлены на компьютере хранится в реестре Windows и мы можем её оттуда удалить. При этом сама программа (если она еще установлена) продолжит работать, более того, останется возможным и нормальное полное её удаление — с помощью файла деинсталляции в её папки. Шаги удаления будут следующими:
- Нажмите клавиши Win+R (Win — клавиша с эмблемой Windows), введите regedit и нажмите Enter.
- Перейдите к разделу реестра
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
- В этом разделе вы найдете подразделы: часть из них могут иметь имена программ, часть — идентификаторы, некоторые вообще не связаны со списком установленных программ. Выбрав любой раздел, в правой части окна редактора обратите внимание на наличие параметра «DisplayName» и его значение. Если параметр присутствует, а его значение соответствует имени программы, которую нужно удалить из списка, удалите весь раздел с этим параметром (правый клик по «Папке» — удалить).
- Если в указанном разделе ваша программа не нашлась, загляните в еще один раздел реестра, где также могут находиться отдельные программы из списка:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
В результате в списке установленных программ ненужный пункт будет удален (для этого потребуется закрыть и заново открыть этот список).
Как уже было отмечено, если программа всё еще находится на компьютере, она никуда не денется и продолжит запускаться и выполнять свои функции. А для её полного удаления в дальнейшем необходимо зайти в папку с программой и найти файл для удаления, обычно его имя начинается с unins (от слова uninstall — деинсталлировать).
Hide From Uninstall List
Бесплатная утилита Hide From Uninstall List создана специально для простого выполнения рассмотренной задачи: скрытия установленных программ как в Панели управления (Программы и компоненты) так и в Параметрах Windows 11/10 (пункт Установленные приложения). Более того, программа может скрыть и сами эти списки.
Подробная информация по загрузке и использованию утилиты — в отдельной инструкции.
CCleaner
В известной большинству программе CCleaner в разделе «Инструменты» — «Удаление программ» также присутствует возможность удалять программу из списка установленных.
Для этого достаточно лишь выбрать программу и нажать кнопку «Удалить» вместо «Деинсталляция» — в результате будет удалена та же запись в реестре, которую в предыдущем способе мы удаляли вручную. Результат действия аналогичен.
Если что-то не сработало или остаются вопросы — задавайте в комментариях, решение должно найтись.
Download Windows Speedup Tool to fix errors and make PC run faster
Not many may know, but there are different ways to uninstall a program in Windows 11/10/8/7. You can uninstall programs using the Control Panel and navigating to the Programs & Features applet, you can use Windows Settings or you can use the Program’s own uninstaller, which you can find in the Program folder, should the need to do so, ever arise. But if the program’s entry is missing in the Control Panel, Settings or the Uninstaller is not available, or these ways do not work for some reason, you can also use the Windows Registry.
To uninstall a program via the Windows Registry, open regedit and navigate to the following key:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
You will see many keys there. These represent the installed programs. They may have long numbers or names.
In case they have names, they would be easy to identify, and in most cases, its UninstallString would point to its un-installers path.
In case they have long numbers, click on each of them till you are able to find the program which you want to uninstall.
Having done that, in the right pane, search for a string value called UninstallString.
Double-click on it. From the dialog box which opens, copy its value.
It will look something like this :
MsiExec.exe /I{B440D659-FECA-4BDD-A12B-5C9F05790FF3}
Next, open command prompt (cmd), paste the value, and hit Enter.
If you see a Value data like say –
"C:\Program Files\Software Name\uninstall.exe"
You may also open the Run box, copy-paste this value, and hit Enter.
The program will commence uninstallation.
If this does not help, you may also try one of these free Uninstallers for Windows.
UPDATE: Bill Pytlovany adds in the comments.
If you have a 64-bit version of Windows, 32-bit apps may be redirected here:
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
Hope this helps.
Anand Khanse is the Admin of TheWindowsClub.com, a 10-year Microsoft MVP (2006-16) & a Windows Insider MVP (2016-2022). Please read the entire post & the comments first, create a System Restore Point before making any changes to your system & be careful about any 3rd-party offers while installing freeware.