C:\Windows\Installer 폴더의 용량 줄이기
일단, 결과 먼저 말씀드리면 Installer 폴더의 용량을 줄이는 것은 실패했지만 ^^ 그래도 새로운 도구의 사용법을 익히게 되어서 그 기록을 남깁니다.
VM에 설치된 Windows 2012 서버의 Installer 폴더 용량이 7GB가 넘어서 혹시나 싶어 검색을 해보았는데요. ^^
C:\Windows\Installer Folder is out of control!
; http://social.msdn.microsoft.com/Forums/sqlserver/en-US/07db294a-79e5-4a5a-916c-6a51e44a5aa4/cwindowsinstaller-folder-is-out-of-control
msizap.exe 프로그램 이야기가 나옵니다. 이에 대한 좀 더 자세한 정보는 다음의 경로에서 얻을 수 있었습니다.
Msizap.exe
; https://docs.microsoft.com/en-us/windows/win32/msi/msizap-exe
MSIZAP: The real power of using the Windows Installer Cleanup Utility
; http://www.pagestart.com/msizap.html
* msizap.exe는 "Windows SDK"에 포함되어 있습니다.
대충 정보를 조합해 보면, 인스톨 실패했을 때 C:\Windows\Installer에 남아 있는 찌꺼기를 지우는 용도로 사용하거나, 아니면 특정 제품 자체를 (업데이트 모두 포함해서) 제거하는 데에도 사용할 수 있습니다. (물론, 그냥 제어판의 "프로그램 추가/삭제"를 이용하겠지만.)
근데, 여러 머신에서 테스트를 해보니 2가지 오류 상황이 나왔습니다. 하나는 다음과 같은 식인데,
D:\Tools>msizap G!
MsiZap V 5.0
Copyright (c) Microsoft Corporation. All Rights Reserved
MsiZapInfo: Performing operations for user S-1-5-21-1990051354-560935109-2448667075-1104
Removing orphaned cached files.
Error opening DB5888DB2EFC34E399CB33CEE401E95F\InstallProperties subkey of Products key for S-1-5-18 user. Error: 2.
FAILED to clear all data.
해답이 다음의 글에 나옵니다.
Clean Up C:\Windows\Installer
; http://wyang0.blogspot.kr/2010/06/clean-up-cwindowsinstaller.html
그냥 문제가 발생한 제품을 삭제하면 된다고 하는데요. regedit.exe를 실행시켜 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData" 경로를 찾아가 그 하위에 에러 메시지에 포함된 S-1-5-18 키로 들어가야 합니다. 그럼, 다시 그 하위에 "Products" 키가 나오고 문제가 되는 제품키인 "DB5888DB2EFC34E399CB33CEE401E95F"를 찾아서 삭제해 주면 됩니다.
또 다른 에러 한 가지는 6번 에러가 발생한 경우인데요.
D:\Tools>msizap G!
MsiZap V 5.0
Copyright (c) Microsoft Corporation. All Rights Reserved
MsiZapInfo: Performing operations for user S-1-5-21
Removing orphaned cached files.
Error enumerating Products key for S-1-5-21 user. Error: 6.
FAILED to clear all data.
이건 아예 사용자 키 수준에서 오류가 발생한 것인데, 다음의 글을 읽어 보니 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData" 경로의 사용자 키를 삭제하면 된다고 합니다.
deleting orphaned files from c:\windows\installer
; http://resque.wordpress.com/2012/04/05/deleting-orphaned-files-from-cwindowsinstaller/
실제로 들어가 보니, 해당 SID 키의 하위로는 Products 키가 없었습니다. 아마도 그 사용자한테 해당하는 제품이 하나도 없는 경우인 것으로 보입니다.
그런데, ^^ 이렇게까지 노력했으나 제 VM 서버는 아주 깨끗한 상태였습니다.
D:\Tools>msizap G!
MsiZap V 5.0
Copyright (c) Microsoft Corporation. All Rights Reserved
MsiZapInfo: Performing operations for user S-1-5-21-1990051354-560935109-2448667075-1104
Removing orphaned cached files.
No product/patch data was found.
참고로, SID는 Security Identifier로 S-...로 표현됩니다. 물론 Win32 API를 호출하면 되지만, 코드 작성 없이 곧바로 SID에 해당하는 사용자 계정을 알 수 있는 방법은 없을까요? 역시 찾아 보니 방법이 있군요. ^^
Getting the Username from the HKEY_USERS values
; http://stackoverflow.com/questions/2919286/getting-the-username-from-the-hkey-users-values
아래의 키들에 가보면, 하위에 SID 값이 나오고 사용자 명을 포함하는 "home path" 값을 봄으로써 판단할 수 있습니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]