Windows Installer가 한 번에 하나의 프로그램 만 설치할 수있는 이유가 항상 궁금합니다. 특히 새로운 Windows 설치를 설정할 때 여러 설치를 시작할 수 없다는 것은 매우 실망스러운 일입니다. 그 이유는 무엇입니까?
답변
동시 설치시 파일의 일부를 공유한다고 가정하면 정확성을 보장하는 것은 매우 복잡합니다. 이것은 어떤 형태의 거래가 필요합니다.
- 파일을 잠 가야합니다
- 설치가 실패하면 중간 변경 사항을 취소 할 수 있어야합니다 (지금 가능하다면 확실하지 않습니까?).
이러한 개념은 트랜잭션 데이터베이스에서 알려져 있지만 주제가 사소한 것은 아니며 일반적으로 파일 시스템에서 저널링 파일 시스템이 그 일부를 제공하더라도 완벽하게 트랜잭션 인프라를 찾지 못합니다. 한 가지 문제는 여러 개의 잠금이 교착 상태로 이어질 수 있다는 것입니다. 교착 상태 감지가 필요합니다 (또는 두 설치 관리자 모두 영원히 중단됨). 교착 상태는 피할 수 있지만 (예 : 항상 같은 순서로 파일을 잠그면) 다른 문제가 있습니다.
필요한 모든 파일을 미리 잠그면 효과적으로 얻을 수 있습니다. 한 설치 관리자가 다른 설치 관리자가 완료 될 때까지 기다려야합니다. 필요한 모든 파일을 미리 잠그지 않고 계속 진행하면 “트랜잭션”이 실패 할 위험이 있습니다. 즉, 설치 프로그램 중 하나를 다시 시작해야합니다.
그런 다음 트랜잭션 격리 수준에 대해 생각해야 할 수도 있습니다. 완전히 정확하려면 트랜잭션을 “직렬화 할 수 있어야 “ 하지만 많은 데이터베이스의 경우에도 쉽지 않습니다.
완전 격리를 우회하는 문제를 해결하기위한 대체 전략이있을 수도 있지만 일반적으로 정확성을 입증하기가 더 어려울 수 있습니다.
동시 설치를 사용하면 훨씬 더 다루기 힘든 설치 후 문제가 발생한다고 생각합니다. 특히 OS 공급 업체 (또는 배포판)가 모든 문제를 겪고 100 % 깨끗하게 만들 것이라고 생각하지 않기 때문입니다. 따라서 OS에서 제공하더라도 사용하지 않는 것이 좋습니다.
노트
그러나 당신이 정말로 원하는 것은 “동시에”설치하지 않는 것입니다. 설치를 대기열에 넣을 수 있다면 (이들 사이에 질문을하지 않고) 차례로 실행되는 것이 충분할 것입니다. 그리고 그것은 실제로 무언가, 다른 OS (배포판)가 훨씬 더 잘 처리합니다.
답변
이것은 동일한 파일 / 폴더 / 레지스트리 키 등을 조작하는 두 개의 설치를 피하기 위해 의도적으로 설계된 것입니다. 다른 방식으로 수행되었을 수도 있지만 Microsoft는이 선택을했습니다.
답변
배치 파일을 사용하여 여러 MSI 파일을 발췌하여 빠른 순서로 설치할 수 있습니다. 두 개의 MSI 파일이 동시에 디스크에 기록된다는 의미에서 두 개의 MSI 파일을 동시에 실행할 수는 없습니다.
그 이유는 MSI 설치의 일부가 “트랜잭션”으로 실행되기 때문입니다. 트랜잭션 목록의 작업이 오류없이 완료되는지 여부에 따라 커밋되거나 롤백되는 일련의 변경 사항입니다. 모두 오류없이 완료된 다음 트랜잭션이 커밋되고, 그렇지 않으면 모든 변경 사항의 전체 롤백이 발생합니다. 주어진 시간에 하나의 거래 만 활성화 될 수 있습니다.
기술 MSI 수준에서는 InstallExecuteSequence의 표준 작업 InstallInitialize와 InstallFinalize 간의 작업 만 트랜잭션으로 실행됩니다. 이러한 작업 이외의 시스템 변경은 발생하지 않지만 때때로 MSI 파일은 다른 순서로 변경하도록 잘못 설계되었습니다.