Windows Installer (.msi 파일)가 다른 설치 프로그램보다 제거하는 데 시간이 더 걸리는 이유는 무엇입니까?


31

Windows XP 이후로 InstallShield 설치 관리자 (MSI의 부트 스트랩 임)를 포함하여 Windows Installer (.msi 파일) 는 다른 설치 프로그램보다 응용 프로그램을 제거하는 데 약 5 배 더 오래 걸렸습니다 . 일반적으로 설치에 대해서도 마찬가지입니다 .

왜 여전히 오래 걸리고 사람들이 여전히 MSI를 설치에 사용합니까? 예를 들면 다음과 같습니다.

VLC 제거-약 5 초가 소요됩니다.
XYZ 제거- "제거 준비 중 ..."을 시작하고 15 초 지연시킵니다.

파일을 제거하고 레지스트리 (COM 등록을 포함 할 수 있음)를 정리하면됩니다. 왜 그렇게 오래 걸립니까?


나는 단지 (1) 시스템 복원 검사 점 기능을 비활성화 하고 (2) 거대한 설치 프로그램 (Windows Installer 고유하지 않음 ) 인 경우에만 사실 입니다. 느린 Inno 설치 프로그램이 많이 보였습니다. 그들이 거대하기 때문에). Windows 설치 관리자 가 몇 초 만에 문자 그대로 설치 하고 제거했습니다. (예를 들어, Bootvis는 내 시스템에 3 초 안에 설치됩니다. 같은 시간 내에 제거됩니다. 그리고 시스템도 빠르지 않습니다.) Windows Installer에는 더 많은 기능이 있으므로 더 큰 프로그램이 있다는 차이점이 있습니다. 더 자주 사용하십시오.
Mehrdad

@Mehrdad (1) 시스템 복원 활성화를 의미 했습니까?
Chris S

정말 그렇습니다, 오타.
Mehrdad

2
MSI 제거가 영원히 걸리기 때문에 여기에 왔으며 실제로 그 이유는 팝업 Do you want to allow the following program from an unknown publisher to make changes to this computer?이 백그라운드에서 숨겨져 있기 때문 입니다.
Nicolas Raoul

MSI 설치를 가속화하기위한 기술적 인 세부 사항에 대한이 답변을 참조하십시오 : superuser.com/a/296534/11906
스타 Åsmul

답변:


32

Windows 설치 관리자는 먼저 시스템 복원 지점을 체계적으로 생성합니다.이 작업은 상당히 느립니다.

또한 적절하게 "Windows Installer sucks" 라는 제목의 기사 에서 발췌 :

예전에는 설치가 소프트웨어를 설치하고 몇 가지 간단한 단계를 수행하여 설치를 취소 한 프로그램으로 구성되어있었습니다.

이것이 Windows Installer의 작동 방식이 아닙니다. 단순히 설치하고 완료하기 위해 프로그램을 실행하는 대신 시스템 상태를 검사 한 다음 프로그램 설치 관리자 인 데이터베이스의 상태를 검사 한 다음이 두 가지를 조정하는 방법에 대한 일련의 지나치게 복잡한 계산을 수행합니다.

설치 스크립트를 실행하는 대신 이동하는 판매원 문제를 해결하는 것으로 보입니다. 이것이 너무 느리게 실행되는 이유입니다. 아니면 적어도 저의 인상입니다.

또한 Windows 설치 관리자는 모든 정보를 레지스트리에 보관하며 이는 세계에서 가장 빠른 데이터베이스가 아닙니다.


3
dpkgdpkg는 패키지 데이터베이스에 사용하는 것보다 빠를 것입니다 (물론 dpkg는 모든 것을 저장하지는 않습니다 ) : /var/lib/dpkg/status한 번 설치되었지만 제거되지 않은 모든 단일 패키지를 나열하는 플랫 텍스트 파일 퍼지 된 것을 항상 생략한다는 것은 확실하지 않습니다.
SamB

3
dpkg그래도 2 분 동안 "남은 시간 : 0 초"라는 진행 표시 줄에 거짓말하지 않습니다.
LawrenceC

20

Windows Installer는 실제로 속도가 느리다는 명성을 가지고 있습니다. 이것에 기여하는 몇 가지 사항이 있으며 아래에서 다루겠습니다. 그러나 궁극적으로 소프트웨어 설치 및 제거시 1 분, 2 분 또는 3 분이 실제로 경합의 문제인지 스스로에게 문의해야합니다. TV 채널을 넘기는 것보다 시간이 더 걸립니다. :)

레지스트리
이것은 범인입니다. Windows Installer는 작업을 위해 레지스트리를 많이 사용합니다. 시스템이 성숙함에 따라 응용 프로그램을 설치 및 제거하고 레지스트리 크기가 커지거나 조각화되면 MSI 속도가 느려집니다. 동일한 응용 프로그램은 성숙 된 시스템보다 원래의 Windows 설치에서 훨씬 빠르게 설치 및 제거됩니다. 여기서 해결책은 레지스트리를 깨끗하고 조각 모음을 시도하는 것입니다.

레지스트리 정리를 위해 사용 가능한 많은 도구 중 하나를 사용하십시오. 그러나 레지스트리 조각 모음의 경우 내부 하이브 최적화에 충분한 NTREGOPT 를 권장 하고 실제 파일 조각 모음에 대해서는 PageDefrag 를 권장하지 않습니다 .

MSI 작동이 레지스트리에서 느려질 수있는 이유는 MSI가 사용하는 방법과 관련이 있습니다. Windows Installer는 레지스트리를 사용하여 어떤 제품이 어떤 구성 요소를 설치했으며 어떤 위치에 설치했는지 추적합니다. 원래 설치 GUID는 압축 형식으로 사용됩니다. 설치에 대한 머신 별 정보는에서 찾을 수있는 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18반면, 사용자 별 데이터는 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\사용자 SID가있는 키와 아래 에 있습니다.

이 두 키는 상당히 클 수 있으며 수많은 하위 키와 값을 포함합니다. 설치된 각 응용 프로그램의 제품, 구성 요소 및 키 경로를 제어합니다. 올바른 설치 제거 절차를 위해서는이 모든 정보를 읽고 처리해야합니다. 그러나 레지스트리 형식은 이진 검색을 허용하는 키를 알파벳 순서로 나열합니다. 그러나 그 가치는 그렇지 않습니다. 생성 된대로 저장되므로 선형 검색 절차를 수행해야합니다. 알고리즘 성능이 느려집니다.

대체로 MSI는 소프트웨어 설치 및 제거를위한 완전하고 정확한 방법입니다. 그러나 레지스트리 종속성으로 인해 어려움을 겪습니다. 시스템이 우수합니다. 오래 전에 점검해야했던 Windows 레지스트리입니다 :)

자세한 고급 정보 :
각 설치 또는 제거 절차 중에 MSI가 수행하는 작업에 대한 심층 분석은 MSI 디버그 설정 방법을 설명하는 이 문서 를 참조하십시오 . 또는, 더 적은을 위해 여전히 가치있는 정보 이것 활성화 방법 로깅 한.


4
또한 내가 아는 한 MSI는 모든 작업에 트랜잭션을 사용하므로 작업이 실패 할 때마다 항상 적절한 롤백을 수행 할 수 있습니다. 이것은 아마도 속도에 기여하지 않지만 데이터 무결성에 매우 중요합니다. (NSIS 설치 관리자가 실패한 후 얼마나 자주 정리해야하는지 계산을 중단했습니다
Joey

지금, 저는 OpenOffice를 설치하고 있으며 거의 ​​1 시간이 지났습니다.)
Quiark

매우 유익합니다. 내 msi 로그에 "복원 지점을 만들 수 없습니다"오류가 자주 발생하는 것 같습니다 (복원 지점 인용에 도달했을 수 있습니까?). 복원 지점을 만들면 설치 시간이 단축되지 않습니다. 어쨌든, 설치 시간이 여전히 느리고 값 조회가 말한 것처럼 느리다면 레지스트리 측의 바이너리 사양에서 추가 리프 / 노드 정보에 대한 추가 구현을 제공해야 할 이유는 없습니다. 이진 검색 보충.
chaz

> 그러나 궁극적으로 소프트웨어 설치 및 제거시 1 분, 2 분 또는 3 분이 실제로 경합의 문제인지 스스로에게 문의해야합니다. 예.
Alexei Averchenko

6

Windows 설치 프로그램은 회사 배포에 많은 이점 이 있으며 여기에 설명되어 있습니다. https://serverfault.com/a/274609/20599

Windows Installer 세션 의 속도 저하 의 대부분은 롤백 기능 때문 입니다. 먼저 설치 또는 제거 전에 복원 지점을 만듭니다 (제공된 시스템 복원이 비활성화되지 않은 경우). 그런 다음 설치 제거 및 설치 중에 영향을받는 모든 파일 을 백업 하여 오류가 발생할 경우 시스템을 원래 상태로 복원 할 수 있도록합니다.

또 다른 기여 요인은 MSI의 모든 구성 요소 가 레지스트리에 등록 된다는 것 입니다. 여기에는 약간의 오버 헤드가 포함됩니다 .

컴파일 된 MSI 파일의 경우 설치 파일추출하는 데 약간의 시간이 필요 합니다 .

MSI 설치 속도를 높이기 위한 기술적 세부 사항 은이 답변을 참조하십시오 .


3

Windows Installer 는 운영 체제 통합, 보안 정책, 무인 설치 등 여러 가지 이유로 일반적으로 사용됩니다.

내가 생각할 수있는 가장 일반적인 이유는 무인 설치 및 네트워크 배포 때문입니다. 대기업은 네트워크 드라이브에 .MSI 파일을 가지고 원격 시스템에서 배치 파일 (또는 배포 마법사 응용 프로그램)을 호출하여 설치 프로세스를 자동화함으로써 응용 프로그램을 쉽게 배포 할 수 있습니다.

다른 옵션은 .MSI 파일 외부에 있지만 대부분의 Windows 버전과 통합되는 고유 한 기능이 있습니다. 많은 설치 관리자에는없는 있습니다.

InstallShield가 항상 MSI 파일의 프런트 엔드 인 것은 아닙니다. 또한 자체 소유 설치 솔루션이 있습니다.


1
문제는 순수한 .exe 설치 프로그램과 비교하여 MSI가 왜 그렇게 오래 걸립니까?
grawity

5
질문에서 ... "왜 사람들은 여전히 ​​MSI를 설치에 사용합니까?"
획기적인

@ grawity : 기술적으로 msi 설치 프로그램은 exe로 패키지 할 수 있지만 머리카락이 쪼개 질 수 있습니다.
music2myear
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.