레지스트리·PowerShell로 프로그램 제거
설치된 프로그램은 모두 레지스트리에 제거 명령을 등록합니다. [설정] → [앱]에서 지워지지 않거나 무인으로 제거해야 할 때는 이 명령을 사용합니다.
Windows가 제거 명령을 저장하는 위치
모든 사용자용으로 설치된 프로그램은 HKLM, 64비트 Windows의 32비트 프로그램은 WOW6432Node, 나에게만 설치된 프로그램은 HKCU 아래에 있습니다. 프로그램마다 하위 키가 있으며, 여기에 DisplayName, DisplayVersion, UninstallString과 대개 QuietUninstallString이 들어 있습니다.
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallHKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\UninstallHKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallPowerShell로 설치된 프로그램 목록 보기
세 위치를 모두 읽어 이름, 버전, 제거 명령을 표시합니다.
$keys = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*"Get-ItemProperty $keys | Where-Object DisplayName | Select-Object DisplayName, DisplayVersion, UninstallString, QuietUninstallString | Sort-Object DisplayName제거 명령 실행
QuietUninstallString이 있으면 확인 없이 프로그램을 제거합니다. 없으면 UninstallString을 실행하고 설치 파일 종류에 맞는 무인 옵션(NSIS는 /S, Inno Setup은 /VERYSILENT)을 붙입니다. MSI 패키지는 하위 키 이름이 ProductCode이므로 msiexec /x로 제거합니다.
msiexec /x {PRODUCT-CODE-GUID} /qn /norestart"C:\Program Files\App\uninstall.exe" /Swinget에 맡기기
winget은 같은 레지스트리 키에서 프로그램을 찾아, 자신이 설치하지 않은 프로그램까지 제거 프로그램을 실행해 줍니다.
winget listwinget uninstall --name "앱 이름"제거 프로그램이 없을 때
제거 프로그램 파일이 삭제되었다면, 같은 버전을 먼저 다시 설치하면 대개 복구되고 그 뒤에 정상적으로 제거할 수 있습니다. 레지스트리 항목을 직접 지우는 것은 프로그램 파일이 이미 없을 때만 하고, 지우기 전에 해당 키를 내보내 둡니다.
자주 묻는 질문
[설정] → [앱]에 프로그램이 보이지 않는 이유는 무엇인가요?
[설정]에는 DisplayName이 있고 시스템 구성 요소로 표시되지 않은 항목만 나옵니다. 포터블 프로그램은 아무것도 등록하지 않으므로 폴더를 삭제하면 제거됩니다.
MSI의 ProductCode란 무엇인가요?
하나의 MSI 패키지를 식별하는 GUID입니다. …\Uninstall 아래에 있는 해당 프로그램의 하위 키 이름이며, ExeAtlas에서는 각 MSI 앱의 무인 설치 페이지에 표시합니다.