태그 보관물: windows-installer

windows-installer

MSI 파일 사용의 기업 이점 권한이 거의

일반 setup.exe 파일보다 .msi 파일을 사용하면 어떤 이점이 있습니까?

사용자에게 권한이 거의 없지만 세부 정보는 확실하지 않은 컴퓨터에서 배포가 더 쉽다는 인상을 받았습니다.

msiexec.exe에는 setup.exe 시나리오를 사용하는 것보다 배포가 더 쉬운 어떤 기능이 있습니까?

.msi 응용 프로그램을 배포 할 때 팁이나 요령이 있습니까?



답변

몇 가지 장점 :

  • 주문형 설치가 가능하도록 광고 할 수 있습니다.
  • 광고와 마찬가지로 사용자가 기능을 사용하려고하면 기능을 설치할 수 있습니다.
  • 상태 관리가 유지되므로 Windows Installer는 관리자가 응용 프로그램이 컴퓨터에 설치되어 있는지 확인할 수있는 방법을 제공합니다.
  • 설치에 실패한 경우 롤백 기능

엔터프라이즈 환경에서 소프트웨어를 배포 할 때 MSI를 통해 소프트웨어를 배포하는 것이 즐겁습니다. 대조적으로, 나는 다른 컨테이너에있을 때 거의 항상 소프트웨어 배포를 두려워합니다.

MSI 설치 조작에 대한 추가 정보를 보려면 msiexec실행 대화 상자를 입력 하십시오.


답변

UPDATE 년 7 월 2018 년 : 아래 정보의 매우 압축 요약 유래로 볼 수 있습니다 : MSI의 주요 장점 ( "executive summary"– 종류의).


나는로 개발에 일한 릴리스 관리자 , 엔지니어 구축 , 설정 개발자 와 같은 응용 프로그램 패키저배포 엔지니어 대기업에 있습니다.

이것은 MSI 의 최고 (최악) 개념실제 기능 에 대한 검토입니다 . MSI 파일에서 발견 되는 가장 일반적인 디자인 문제아래에 별도의 답변으로 제공됩니다 . 완전하지 않은 척-정말 지저분한 “뇌 덤프”- “책에서 찾을 수없는 것들”(아마도 정당한 이유).

또한이 MSDN 기사Windows Installer : 시스템 관리자를위한 이점 및 구현으로 읽어보십시오 .


표준화:

한마디로 MSI는 표준화와 레거시 설치 프로그램 기술의 ” 배취 냄새 “를 다루는 것입니다 . 반복적 인 배포 문제를 일으킨 잘못된 설치 아키텍처 디자인의 전체 모음.

전반적으로 MSI가 제공하는 포괄적 인 표준 프레임 워크 설치에 대한 결정적으로도 제거 포함 하고 내장 기능과 옵션이 자동 실행 으로 표준화 된 GUI 할 수 있습니다 원격 트리거를 .

이러한 기능만으로도 이전 설치 기술에 비해 설치 제거 및 자동 실행이 우연히 처리되었습니다. 아마도 회사 배포에 가장 중요한 기능 일뿐 아니라 Active Directory 또는 Microsoft SCCM (이전의 SMS)과 같은 전용 원격 관리 도구를 통한 안정적인 원격 패키지 관리 , IBM Tivoli , CA Unicenter 및 유사

누군가이 답변의 이전 버전을 복제했습니다 . 더 빨리 읽을 수 있습니까?


레거시 설치 프로그램 “배포 냄새”

MSI는 기존 배포 냄새 를 의도적 으로 권장하지 않습니다 . 이러한 주제는 아래 섹션에서 설명하지만 레거시 설치 관리자 및 이전 배포 기술에서 가장 잘 알려진 문제는 다음과 같습니다.

  • 1) 그들은 때때로 다운 그레이드 공유 및 덮어 쓰기 파일 버전 에 대한 작은 관심과 DLL-지옥 결과
  • 2) 이 종종 있었다 적절한 제거 루틴하지 설치와 함께 제공, 또는 적절하고 안정적으로 완료되지 않았습니다 – 자동으로 실행 특히합니다. 이것은 기업 공기업 경영에 매우 큰 문제입니다
  • 3) 자동 설치 가 제대로 지원되지 않았습니다. 안정성이 좋지 않았으며, 대화 상자를 선택하여 설치 실행을 기록해야하는 경우가 많았으며 원래 실행시 기록되지 않은 오류 대화 상자 또는 경고 대화 상자와 같은 예기치 않은 조건을 제대로 처리하지 못했습니다.
  • 4) 설치 프로그램은 설치된 내용을 기록하지 않았으므로 디스크에서 파일을 확인하여 파일이 여전히 설치 프로그램에 의해 원래 설치된 버전인지 자동으로 확인할 수있는 방법이 없었습니다.
  • 5) 설치 실행 파일에 대해 예측할 수없고 신뢰할 수없고 비표준적인 명령 줄 매개 변수 를 제공했습니다.
  • 6) 비표준 명령 줄과 표준이 없기 때문에 회사 배포에 필요한 특정 값으로 신뢰할 수 있고 예측 가능한 방식으로 설치 프로그램을 사용자 정의하기가 어려웠습니다.
  • 7) 일반 사용자는 이러한 설치를 실행할 수 없었으며 임시 관리자 권한으로 엉망이 되었음 (충분한 경우 “다음 계정으로 실행”을 사용하거나 관리자로 로그인하여 설치 한 다음 로그 아웃하십시오)-이 전체 로그인 및 프로파일 생성 때로는 설치를 완료해야했습니다.)
  • 8) 있는 setup.exe 설치는 종종 것이 적절한 에러 코드를 반환하지 또는 성공 코드를, 때로는 즉시 종료 것이며 완료 할 다른 프로세스의 킥이 (가)가 완료 설치하는 경우 어려운 결정하게 설치 – 특히 배치를 통해 파일
  • 9) 대부분의 setup.exe 파일은 파일을 추출 할 수 있었지만 신뢰할 수 있고 예측할 수없는 방식으로 허용했습니다. 일반적으로 올바른 스위치를 찾는 데 많은 시간을 소비해야했습니다.
  • 10) 로깅 은 일반적으로 열악했으며 일부 도구에서는 우연히 발생했습니다. 로그 파일을 사용한 디버깅은 명확성을 거의 얻지 못했지만 약간 도움이되었습니다.
  • 11) 설치 관리자가 수행 한 작업에 투명성없고 설치 실패 후 변경 사항을 실행 취소하기위한 롤백없거나 신뢰할 수 없음
  • 12) 공유 런타임 구성 요소 를 운영 체제 구성 요소, 타사 구성 요소 또는 자체 구성 요소 로 배포하는 업계 표준 방법없었습니다.

이 목록에는 기타 중요하고 인정 된 배포 결함이 많이 있습니다. 회사 배포 세계에서는 이러한 문제가 가장 자주 나타 났으며, 표준 호환 MSI 파일을 만들기 위해 디스크 및 레지스트리 검색 기술레거시 설치 관리자 를 캡처 하는 ” 애플리케이션 리 패키징 ” 비즈니스로 이어졌습니다. 안정적인 배포를 위해

응용 프로그램 재 패키징전문적인 작업 이며 일반적으로 지식이있는 사람이 올바르게 수행하면 우수한 품질의 MSI 파일이 생성되지만 특정 응용 프로그램이 작동하려면 대화식으로 실행해야하는 복잡한 등록 논리로 인해 모든 응용 프로그램을 재 포장 할 수는 없습니다.


MSI의 장점-요약

에서 일반 언어 MSI의 정말 중요한 이점은 (특별한 순서없이)입니다 :

  • 1) 제거 가 활성화되어 있지 않으면 모든 패키지에 대해 항상 사용 가능합니다.
  • 2) 로깅 과 동일 하지만 상세하지만 훌륭합니다 (WiLogUtl.exe와 같은 도구를 사용하여 로그 파일을 분석 할 수 있음)
  • 3) MSI 파일의 기능은 대부분 반투명 또는 “검사 가능”입니다. 예외는 사용자 지정 작업입니다 (아래 투명성 섹션 참조).
  • 4) 설정 사용자 정의가 표준화 된 방식으로 수행됩니다 ( 변환 ).
  • 5) 설치가 Active Directory 알림, 그룹 정책 또는 원격 관리를 통해 상승되어 실행되므로 임시 관리자 권한 을 망칠 필요가 없습니다 . 여기에 몇 가지 자격이 있습니다. 또한 그룹 정책 개체 편집기 에서이 스크린 샷 을 참조하십시오 .
  • 6) 관리 도구 또는 msiexec.exe를 사용하여 자동 설치 / 제거
  • 7) 실패한 설치에 대한 전체 롤백 지원이 있습니다. 상자에 수동으로 설치하는 경우 알아야 할 몇 가지 자격이 있습니다.
  • 8) MSI 파일은 데이터베이스 스키마를 준수하므로 일관성 및 논리적 유효성에 대한 검사 및 유효성 검사에 적합합니다 ( 유효성 검사 예 참조 ).
  • 9) 업데이트는 표준화 된 유형이지만 경험이 부족한 패키저에게는 복잡하고 종종 오류가 발생하기 쉽습니다.
  • 10) 파일 추출 의 MSI에서는 내장 기능 (좋은 간략한 개요에 대한 링크 된 기사를 확인)입니다
  • 11) Windows Installer 명령 줄인 msiexec.exe 는 설치 순서를 수행하는 방법을 매우 세밀하게 제어하며 모든 옵션은 모든 표준 호환 MSI 파일 (로그 수준 설정, 자동 / 대화식 / 반자동 실행) 과 함께 작동합니다. , 설치 매개 변수 설정, 변환 적용 등 …).
  • 12) 병합 모듈 은 여러 MSI 패키지로 공유 파일을 전달하기위한 MSI 메커니즘입니다. 컴파일 타임에 MSI 패키지와 병합 가능한 소모품 모듈 또는 설치 로직 번들입니다. Wix는 Wix 포함 파일을 사용하여이 개념을 확장하고 향상 시켰습니다. 필자의 의견으로는 모듈 병합보다 우수합니다. 특히 자신의 파일 (예 : OS 파일이 아닌 경우)
  • 13) Windows Installer 엔진 자체에는 설치시 버전 또는 수정 된 파일 덮어 쓰기방지 하는 메커니즘이 있습니다. 이것은 다소 복잡한 파일 교체 로직에 의해 제어됩니다 . 효율적이고 훌륭하지만, 많은 개발자들이 업그레이드 할 때 수정 된 구성 파일을 덮어 쓸 수 없다는 문제에 직면하기 때문에 로직 자체가 문제가 될 수 있습니다. 이러한 문제에 대한 해결책은 일반적으로 일반적인 배포 반 패턴 을 피하기 위해 응용 프로그램 디자인을 약간 변경 하는 것입니다.

에서 실제 내가 찾은 적은 성공적인 측면을 포함하는 패치 (매우 복잡한) MSI-GUI (매우 복잡 일반 기능, 유연성이 부족하다), 탄력성이 (가 발생할 수 자체 수리 문제를 반복 디버그 하드 등) 전반적인 복잡성을 초보자를위한 기술을 다루는 것 (업그레이드, GUI 및 많은 상호 작용하는 세부 사항 등 예기치 않은 결과가 발생하는 등의 기본 작업의 복잡성) MSI의 오버 헤드가 증가하여 설치 프로세스 속도도 상당히 느려졌습니다. MSI 설치 속도 향상에 대한 몇 가지 팁을 참조하십시오 .

이 텍스트의 나머지 부분에서는 MSI의 이러한 측면 중 일부에 대해 자세히 설명합니다.


투명성 (오픈 설치 프로그램 형식)

MSI 파일은 본질적 으로 파일 또는 데이터 스트림 모음의 파일 시스템 인 COM 구조의 저장소 파일 로 저장 되는 제거 된 SQL-Server 데이터베이스 입니다. 이것은 Microsoft Office 문서에 사용되는 파일 형식이며, 검토검사 할 수 있는 표준 형식제공합니다 . 대기업 에게는 큰 문제 입니다.

컴파일 된 사용자 지정 작업을 제외하고 MSI 파일은 흰색 상자 입니다. 설정이 시스템 전체의 네트워크 설정과 같은 열악한 것을 변경하면 실제로 적절한 도구를 사용하여 볼 수 있습니다 . 주목할만한 예외는 사용자 지정 작업 컴파일 입니다 – 블랙 박스 . Windows 로고 요구 사항 에는 작업 내용을 설명하기 위해 사용자 지정 작업에 주석을 달아야하지만 설치 개발자는이를 종종 무시합니다. Wix의 출현이이를 개선하기를 바랍니다.

이러한 컴파일 된 사용자 지정 작업이 실제로 기술적 의미에서 수행하는 작업을 확인하려면 설정 캡처 가 필요합니다. 이것은 내 경험으로는 거의 이루어지지 않습니다. 소프트웨어에 회사 배포에 대한 승인이 필요한 경우 공급 업체에 문의하는 것이 더 일반적이며, 설정뿐만 아니라 사용을 방해하는 응용 프로그램 자체 일 수도 있습니다.

커스터마이즈 가능성 (변형)

MSI는 공급 업체의 설치 프로그램 업데이트와 상호 운용성을 유지하면서 조직의 요구와 표준에 맞게 변환을 통해 사용자 정의 할 수 있습니다. 설치 관리자 자체는 변경하지 않고 변환 (.mst 파일) 이라는 별도의 조직 별 파일 (원하는 경우 데이터베이스 조각 또는 변경 트랜잭션 )로 사용자 지정을 만듭니다 . 사용자 정의 작업을 비활성화하거나 일반적으로 설치 관리자의 항목을 재정의하거나 비활성화 할 수 있으며 파일을 포함하여 새 항목을 추가 할 수도 있습니다. 변환 파일은 때때로 MSI 파일을 다른 언어로 지역화하는 데 사용됩니다. 하나의 MSI에 여러 변환을 적용 할 수 있습니다 . 경로잘린 샘플은 다음 과 같습니다.

msiexec.exe /I "My.msi" /QN /L*V "C:\My.log" TRANSFORMS="C:\1031.mst;C:\My.mst"

빠른 매개 변수 설명 :

/QN = run completely silently
/L*V "C:\My.log"= verbose logging
TRANSFORMS="C:\1031.mst;C:\My.mst" = Apply transforms 1031.mst and My.mst.

관리 및보고

Windows Installer 는 제품이 레지스트리에 설치 한 모든 항목에 대한 포괄적 인 데이터베이스 를 유지 관리합니다 ( HKEY_CLASSES_ROOT \ Installer- 여기서 직접 변경하지 마십시오! 전문가에게도 해당됨).

제품 설치 여부, 설치된 기능 및 설치된 파일 버전을 확실하게 확인할 수 있습니다. 또한 기본 제품에 적용된 패치 목록이있을 수 있습니다 (있는 경우). Microsoft SCCM , IBM Tivoli , CA Unicenter 등과 같은 다양한 스크립팅, 구성 및 관리 도구를 사용하여 API 지원 Win32, COM 또는 .NET통해이 데이터베이스에 액세스 할 수 있습니다 .

보안 (임시 높은 권한)

MSI에는 또한 “권한이 높은”원칙이 포함되어있어 제한된 사용자가 관리자 권한이 필요한 제품의 설치를 트리거 할 수 있습니다. 이것은 관리자가 모든 워크 스테이션에 실제로 설치 프로그램을 설치하지 않고도 설치 프로그램을 사용할 수있게하는 ” 광고 기능 ” 의 일부입니다 . 이 높은 권한 개념이 올바르게 작동하려면 설치 관리자 자체가 여러 핵심 계정에서 올바르게 작성되어야합니다. 사용자는 제품 자체의 설치를 트리거하거나 SCCM, Tivoli, Unicenter (대개 회사)와 같은 전용 배치 시스템으로 설치를 제어 할 수 있습니다. 작업을 수행하기 위해 임시 관리자 권한망칠 필요가 없습니다. 레거시 설치 프로그램의 경우가 종종 있습니다.

포괄적 인 설치 데이터베이스는 설치된 패치에 대한 전체 개요를 제공하므로 자동화 및 관리 도구를 통해 보안 취약성을 탐지 할 수 있습니다.

확인, 검증

MSI 파일을 유효성 검사 규칙으로 검사하여 여러 내부 일관성 규칙 ( ICE 라고 함)을 준수하는지 확인할 수 있습니다.). 회사는 특수한 회사 규칙 및 요구 사항을 적용하기 위해 자체 ICE 검사를 만들 수 있습니다. 이는 품질 관리에 큰 도움이됩니다. 유효성 검증이 가능한 이유는 관계형 데이터베이스의 자체 참조 특성 및 연관된 데이터베이스 스키마 때문입니다. 데이터베이스는 외래 키, 데이터 형식, 필드 너비, 스키마 버전 등과 관련하여 내부적으로 일관되고 자체 스키마와 호환되어야합니다. 형식 지정 및 유형 결함이 아닙니다. 예를 들어, 잘못된 대상에 배포중인 파일 또는 파일 형식을 검색 할 수 있습니다.

복원력 (자기 수리)

Windows 설치 관리자관리자 설치 기능은 MSI에서 소스 파일을 추출하는 표준 방법을 제공합니다 ( 여기에서이 주제에 대한 추가 정보가 있습니다 ). 그런 다음이 소스 파일을 공유에 배치하고 모든 워크 스테이션에서 설치할 수 있습니다. 이를 통해 CD 또는 유사한 설치 매체를 요청하지 않고도 수리, 설치 제거 및 수정 작업이 완료됩니다. 이는 특별한 상황에서 이전 버전의 소스 파일에 액세스해야하는 패치 및 업데이트 작업에 특히 중요합니다.

이 복원 기능에는 일반적인 문제가 있습니다. 대부분의 관리자는 주기적으로자가 복구주기반복 되는 시스템을 경험했습니다 . 이 문제의 긴 원인 목록을 보려면 링크를 따르십시오. 그리고 다시, 여기 더 읽기 쉬운 짧은 버전 이 있습니다.

롤백

MSI 파일을 설치하면 일반적으로 복원 지점 작성이 시작 됩니다. 또한 설치 중 교체 또는 덮어 쓰기 된 모든 파일 및 레지스트리 항목은 설치가 완료되지 않으면 사용자 지정 작업에서 수행 된 변경 사항을 금지하고 저장 및 복원됩니다.

사용자 지정 작업은 Windows 로고 준수를위한 자체 롤백 지원을 구현해야합니다. 이것은 종종 무시되지만 기본 사용자 정의 조치의 변경 사항을 실행 취소하기 위해 두 번째 사용자 정의 조치를 작성해야합니다.

롤백은 설치에 실패하더라도 워크 스테이션이 안정적인 상태를 유지하도록합니다. 실제 롤백 스크립트는 A의 저장되어있는 숨겨진 폴더 시스템 드라이브에 직접 – 일반적으로 C : \ Config.MSI , 그리고 그것은 확장 .RBS와 .RBF를 가진 파일이 포함되어 – 롤백 스크립트 파일 . 잘못 설계된 MSI 파일이 Windows의 기본 제공 기능을 위반할 수 있다고 예상 할 수 있으므로 자세한 내용은이 스레드의 다른 게시물을 참조하십시오.

롤백을 비활성화하고 설치 속도를 높이는 방법이 있습니다. 일반적으로 권장되지 는 않지만 MSIFASTINSTALL 속성 및 DISABLEROLLBACK에 대한 자세한 내용은 다음과 같습니다 . 이것은 복잡한 기능이지만 빠른 롤백 개요 입니다.

패치 및 업데이트

매우 복잡하지만 Windows Installer의 패치는 시스템에서 완벽하게 관리 및 등록되므로 설치된 내용을 확인하여 시스템 보안 상태를 확인할 수 있습니다. 업데이트는 몇 가지 기본 변형으로 표준화되며,이를 통해 복잡성을 처리 할 수있는 경우보다 확실하게 업데이트를 수행 할 수 있습니다. 배포 시스템은 어떤 업데이트가 실패했으며 그 이유를보고 할 수 있습니다.

주관적인보기 패치는 잘 작동에 2 개 기본적인 용도 : 1 전달 제품) 작은 핫픽스 및 2 )이 제품 깨끗한 제거를 방지의 결함 제거 순서를 해결하기 위해 설치된 제품을 패치.

패치는 이미 작동중인 업데이트를 위한 전달 메커니즘 일뿐 입니다. 따라서 원래 설정보다 더 복잡 하고 오류가 발생하기 쉬운 컨테이너 일뿐 입니다. 패치의 가장 중요한 규칙은 패치 가 원래 MSI보다 작아야하거나 패치를 제공 할 분명한 이유가 없다는 것입니다. 여러 제품 버전을 대상으로하는 패치는 빠르게 커질 수 있습니다.

로깅 (자세한 내용)

Windows Installer는 표준화 된 로깅 기능 을 제공 하여 이전 화신보다 훨씬 우수하지만 거의 지나치게 장황합니다. 로그 파일을 사용하여 해독 할 수 있습니다 로그 분석기사용자 정의 로그 수준은 불필요한 정보와 너무 큰 로그 파일을 생성 제거하는 데 사용할 수 있습니다. 디버깅 목적으로 자세한 로깅은 매우 유용합니다. MSI 로그 파일을 읽는 좋은 수동 방법 은 Rob Mensching의 블로그 를 참조하십시오 (본질적으로 로그 파일에서 ” value 3 ” 을 검색 함 ). 자세한 로깅을 수행하는 샘플 명령 행은 다음과 같습니다.

msiexec.exe /I "C:\Installer.msi" /QN /L*V "C:\msilog.log"

Windows Installer 팀Robert Macdonald 의이 기사 는 MSI 로깅 : Windows Installer 로그를 해석하는 방법에 대한 실제적인 모습으로 적극 권장됩니다 .


결론

Windows Installer에 관한 모든 것이 좋은 것은 아닙니다 . 그것의 복잡성은 이해할 수없는 수 시간에,하지만 당신은 계정에 위의 혜택 목록을 때 대기업에 대한 MSI 파일은 크게 배포의 다른 형태에 우수하다.

새로운 설치 프로그램 패러다임 (대규모 SQL 문)

새로운 ” 패러다임 ” 을 이해하려면 MSI가 고정 된 일련의 이벤트가 아니라 대상 시스템에서 어떤 일이 일어날 지에 대한 선언적 설명 으로 의도 된 것임을 이해하는 것이 중요 합니다. 거대한 SQL 문 으로 생각할 수 있다고 가정합니다 . 예를 들어 INI 파일에 추가하거나 수정하려는 항목을 선언합니다. 설치가 실행되면 변경 사항을 추적하고 롤백을 사용할 수 있으므로 설치에 실패한 경우 변경 사항을 되돌릴 수 있습니다. 이것은 실제로 ” automagic ” 처럼 작동 하며 올바르게 수행 될 때 신뢰할 수 있습니다.

맞춤 작업 (일반적인 용의자)

그것은이다 거대한 두통 에 대한 경험 MSI 개발자 사람들이 복잡한에 의존보고, 더 나은로 구현되는 기능에 대한 신뢰할 수없는 사용자 지정 작업에 내장 된 MSI의 기능을 제공합니다. 모든 MSI 오류 및 롤백 문제의 상당 부분은 잘못된 사용자 지정 작업으로 인해 발생하며 대부분의 다른 오류는 MSI 디자인을 잘못 사용하여 발생합니다 (일반적인 MSI 오류 목록은 별도의 답변 참조).

기본 제공 MSI 기능 외에도 MSI 파일을 컴파일하는 XML 방식 인 Wix 와 같은 새로운 프레임 워크를 통해 점점 더 많은 사용자 정의 기능을 사용할 수 있으므로 대부분의 작업에 복잡한 사용자 정의 동작 로직이 필요하지 않습니다.

MSI 는 ini 파일 설정, 글꼴, 환경 변수, 레지스트리 키, COM 정보, 바로 가기, 파일 확장자, 시작 조건, GAC 설치, ODBC 등의 병합 처리를 완벽하게 지원합니다.

WIX가 에 대한 지원과 함께 더 나아가 매우 고급 기능 , 같은 SQL 서버 확장으로 설치 및 구성, 성능 카운터, DirectX를 확인하고 다른 게임 관련 작업을 IIS, .NET 네이티브 이미지 생성, COM +, 드라이버, 방화벽 규칙, PowerShell을 확장, 응용 프로그램 폐쇄, 사용자, 그룹, 공유 등을 관리합니다. 처리하는 데 다소 관련이 있지만 사용자 정의 작업보다 훨씬 안정적입니다.

가능한 경우 모든 비용으로 사용자 지정 작업 방지

관점에 넣어 시도하려면이 내장기성품 솔루션 된다 사용할 수있는 최고의 배포 전문가에 의해 만들어진 , 그리고 그들이 수천 테스트 아마도 수만 또는 사용자의 수백만 MSI에 내장 된 물건 ( 그 자체). 자신 만의 맞춤 작업을 더 잘 수행 할 수 있다고 생각하십니까? 사용자 지정 작업을 사용하는 것은 드문 경우이며 설치 한 제품에 고유 한 작업을 수행해야합니다 . 또한 적절한 롤백 지원도 작성해야합니다.

사용자 지정 작업을 작성하는 것은 거의 항상 실수 이지만 유연성이 정말로 필요한 실제 사례가 있습니다. 항상 그렇듯이 전투를 잘 선택하는 것이 중요합니다. 처음에는 재미있는 일이지만, 예상치 못한 많은 문제에 직면하여 많은 시간을 낭비하게 될 것입니다. 나는 이것을 매우 진지하게 의미합니다. 오류가 발생하기 쉬운 VBScript 사용자 지정 작업을 제거하기 위해 회사에서 직접 사용할 수있는 C ++ 사용자 지정 작업 모음을 작성했습니다. 실제 MSI 파일에 대한 연결은 그다지 복잡하지 않습니다. 어떤 기성품 옵션을 사용할 수 있는지 조사하는 데 몇 주 동안의 개발 작업이 절약되고 배치 안정성이 훨씬 높아질 수 있습니다.

응용 프로그램 시작 순서 사용

매우 중요한 요점은 예측 가능한 런타임 컨텍스트와 사용 가능한 오류 처리가 가능하고 한 번만 실행되고 매우 가장 된 가장 , 시퀀싱 , 컨디셔닝런타임을 특징으로하는 설정이 아닌 경우 애플리케이션 실행시 많은 애플리케이션 구성이 발생해야한다는 것입니다. 복잡성 .

설치 프로그램은 응용 프로그램을 구성해서는 안되며 처음 시작할 때 응용 프로그램을 구성 할 수 있도록 준비해야합니다 . 특히 설치 프로그램은 HKLM에 쓰기, 서비스 등록, 시스템 별 경로에 설치 및 응용 프로그램이 일반 사용자 권한으로 자체적으로 작성할 수없는 것과 같은 높은 권한이 필요한 모든 설정을 작성해야합니다.

설정 개발자 인 경우 설정 사용자 지정 작업을 작성하는 대신 응용 프로그램 시작 시퀀스를 코딩해야합니다 . 다른 것이 없다면, 당신이 다른 사람에게 “벅을 넘기려고”하는 것처럼 보이는 것을 피하기 위해. 이 시작 순서에서 QA 직원의 테스트를 쉽게받을 수있는 훨씬 더 안정적이고 테스트 가능한 코드를 작성할 수 있습니다 (배포 테스트 및 응용 프로그램 테스트를 이해하지 못하는 경우가 많습니다).

설정 복잡성

설정 복잡성의 핵심은 오류가 누적되는 것 (빠른 재 컴파일이 아닌 전달 프로세스를 관리하고 있음), 오류를 디버깅하기가 매우 어렵다 (오류가 발생한 시스템에 액세스 할 수 없음) 및 대상 시스템을 중심으로합니다. 상태는 상상할 수있는 모든면에서 다릅니다 . 이 복잡성과 대상 시스템이 Windows Installer 및 WiX 생성 및 배포 복잡성 (아래쪽 참조) 과 같은 여러 가지 방법으로주의를 기울이는 방법에 대한 자세한 내용은이 답변을 참조하십시오.

WiX (일부 목적에 가장 적합한 MSI 솔루션)

MSI 파일을 컴파일하는 새로운 XML 기반 방법에 대한 설명은 이 WiX 빠른 소개 를 읽으십시오 . 텍스트 기반 소스 파일은 이전보다 훨씬 나은 소스 제어 기능을 제공합니다. 이것은 무료로 제공되는 오픈 소스 툴킷으로 강력히 권장 됩니다.

NB : MSI 파일 의 일반적인 디자인 문제 에 대한 빠른 설명은 스레드의 다른 부분을 참조하십시오. 불완전하지만 읽을 가치가 있습니다. 100 % 관련이 없기 때문에이 회신에 추가하고 싶지 않지만 실제 사용에는 중요한 주제입니다.


시스템 관리자를위한 몇 가지 핵심 MSI 정보 :

(부끄러운 “프로모션”을 용서하십시오-쉽게 액세스하고 검색 할 수 있습니다)

다음은 네트워크에서 배포를 제어하려는 시스템 관리자에게 도움이 될 수있는 몇 가지 항목에 대한 링크입니다.

특별 사용 방법 주제 :

개념적 주제 / 모범 사례 :


답변

이 답변은 진행중인 작업이며 대략적인 개요입니다. 추가, 질문 및 업데이트를 환영합니다. 이 목록이 결코 완전한 것은 아닙니다. 번거로운 패키지에 대한 정보가 포함 된 주석을 추가하십시오.


MSI 패키지에서 발생하는 일반적인 문제 및 디자인 결함

또한 많은 MSI 파일에는 오류, 때로는 심각한 파일이 포함되어 있지만, 숙련 된 응용 프로그램 패키지 관리자가이를 감지하여 대부분의 경우 문제를 해결할 수 있다고 경고해야합니다. 본질적으로 다른 질문에 대답하기 때문에 이것을 별도의 답변으로 추가하고 있지만 동일한 스레드와 관련이 있다고 생각합니다.

MSI와 관련된 기술적 세부 사항은 매우 복잡 합니다. 기본적으로 파일 및 레지스트리 설정을 구성 요소 (원자 설치) 및 기능 (사전 기능과 같이 설치할 사용자가 선택할 수있는 응용 프로그램 부분)으로 분해합니다. 구성 요소를 분할하기위한 여러 가지 모범 사례 규칙이 있으며 여기 MSI 파일의 오류가 많습니다. 이러한 오류는 일반적으로 “주요 업그레이드”사용을 표준화하여 처리됩니다.

실제 설치는 여러 설치 순서로 수행되며 일부는 높은 권한을 갖습니다 . 이 모든 것들이 데이터베이스 테이블에 정의되어 있으며, MSI가 이해하고 다루기가 매우 복잡합니다. 설치 순서 전체에 표준 및 사용자 지정 작업이 적용됩니다. 표준 작업은 Microsoft에서 설계되었으며 수행해야합니다 (시퀀스를 때때로 수정할 수 있음). 공급 업체는 MSI 자체에서 다루지 않는 사용자 지정 논리를 수행하기 위해 사용자 지정 작업을 사용할 수 있습니다. 이들은 스크립트 또는 컴파일 된 형태 일 수 있습니다. 사용자 지정 작업은 즉시 (한 번에 실행되고, 시스템을 변경하지는 않지만 자주 변경되거나) 연기되거나 (배당 스크립트에 작성되어 트랜잭션으로 실행되어 롤백을 지원함) 연기 될 수 있습니다.

MSI의 일반적인 오류 는 다음과 같습니다 (특별한 순서는 없으며 실제 혼란으로 표시됨).

  • 구성 요소 생성 오류 (모범 사례를 따르지 않음). 이로 인해 파일 및 설정 누락 또는 의미없는 오류로 폭발하는 패치와 같은 신비한 증상으로 패치 및 업그레이드에 문제가 발생할 수 있습니다. 지나치게 단순화하려면 파일 수가 많지 않은 한 구성 요소 당 하나의 파일을 사용해야합니다.
  • 덮어 쓰거나 재설정되는 사용자 데이터와 관련된 업그레이드 문제 . 자세한 내용은 아래를 참조하십시오.
  • 설치 순서의 “트랜잭션 된 섹션”외부에서 사용자 정의 조치의 올바르지 않은 스케줄 또는 잘못된 유형의 사용자 정의 조치가 잘못 배치되었습니다. 이로 인해 배포 시스템을 통해 원격으로 실행될 때 작업이 실패하고 (높은 권한이 없음) 트랜잭션 된 작업 만 롤백되므로 롤백이 효과적으로 손상됩니다. Windows Installer 트랜잭션 (데이터베이스 트랜잭션 커밋 생각)은 기본 설치 순서에서 표준 작업 InstallInitializeInstallFinalize 사이에서 실행되며 상승 된 권한으로 실행됩니다 . 시스템에 대한 모든 변경 사항은이 트랜잭션에서 수행되어야합니다. 다른 것은 잘못되었지만 (아쉽게도 매우 일반적입니다).
  • 즉각적인 모드 사용자 정의 조치를 사용하여 처리 된 설치 순서를 벗어난 시스템을 변경합니다 . 이로 인해 롤백 지원이 중단되고 설치 순서의 위치에 상관없이 즉각적인 모드 사용자 지정 작업이 높은 사용자 권한으로 실행되지 않으므로 일반적으로 보안 오류가 발생합니다.
  • 명백한 이유없이 반복적 인자가 수리주기 가 발생하는 잘못된 설계 . 다음은 installsite.org의이 주제에 관한 다른 기사입니다.
  • 무인 설치 모드에서 GUI 억제에 따르지 않는 사용자 지정 작업 은 자동 실행시 배포가 완전히 실패하게하는 모달 대화 상자를 표시 할 수 있습니다. 자동 모드 및 대화식 모드 사이의 전반적인 차이와 함께이 문제는 (다소 장황하고 장황한) 여기에 자세히 설명되어 있습니다 : 제어판에서 제거가 된 .msi에서 제거 다르다
  • 잘못 작성된 패키지의 일부 사용자 지정 작업 은 사용자 인터페이스 시퀀스에만 삽입됩니다 . 이로 인해 자동 설치 모드로 실행되지 않습니다. 자동 설치가 거의 독점적으로 사용되므로 회사 배포에 심각한 문제입니다. 이 문제는 또한 설치 제거에 영향을 줄 수 있으며 모든 정리 사용자 정의 조치가 실행되도록하려면 설치 제거를 위해 대화식으로 설치 제거를 실행해야 할 수도 있습니다. 사용자 인터페이스 레벨에 대한 자세한 설명은 이전 글 머리의 링크를 참조하십시오.
  • 설치 프로그램은 설치하려는 위치에 배포되지 않은 파일을 포함합니다. 일반적으로 winsxs 어셈블리 폴더에 나란히 설치해야하는 시스템 파일.
  • 느린 설치 속도 는 많은 사람들이 MSI에보고하는 또 다른 “문제”입니다. 주제에 대한 몇 가지 팁이 있습니다 . 전체 Windows Installer는 설치중인 레지스트리에 대한 등록 요구 사항이 많기 때문에 약간의 오버 헤드가 있습니다.
  • 사용자 정의 정보 또는 공유 데이터 파일 덮어 쓰기 . 예를 들어 IniFile 테이블이 아닌 File 테이블을 통해 INI 파일이 설치되어있는 경우에 발생할 수 있습니다. 후자의 경우 전자의 경우 “변경 트랜잭션”으로 취급됩니다. 이는 파일 교체 작업입니다. INI 파일에 비표준 형식 또는 파일과 함께 배포하려는 큰 주석 섹션이없는 경우 (일반적으로 일반적이지 않은 경우) 일반적으로 잘못됩니다 개발자 도구).
  • 파일 덮어 쓰기에 대한 복잡한 규칙은 파일에서 업데이트 된 모든 실수로 덮어, 또는하지 될 수 있습니다 -이 고전 MSI 문제입니다. 업그레이드하지 않는 파일을 강제로 덮어 쓰는 방법에 대해서는이 문서를 확인하십시오 . msiexec.exe 명령 줄 수준 (이전 버전 덮어 쓰기, 동일한 버전 덮어 쓰기, 모든 버전 덮어 쓰기 등)에 설정된 REINSTALLMODE 속성의 사용자 지정 설정으로 규칙을 약간 조정할 수 있으며 데이터 파일 및 버전이 지정된 파일에 대해 다르게 작동합니다. SDK의 세부 사항 . 이것을 이해하는 것이 중요하며, 이해 될 때조차 종종 눈살을 찌푸리는 디자인입니다.
  • 설치 중에 COM 파일을 자체 등록 하면 보안 경고가 트리거되거나 다양한 방식으로 문제가 발생할 수 있습니다. 이 기사를 확인하십시오 : 자체 등록은 유해한 것으로 간주됩니다 .
  • 파일 교체 문제의 변형은 주요 업그레이드 (제품 제거 및 재설치)가 수정 된 파일을 제거하고 기본 버전을 재설치하는 경우입니다. 이 경우 실제로 실제로 제거했다가 다시 설치 하면 내용이 되돌 리거나 덮어 쓴 것처럼 보입니다 .
  • 사용자 정의 사용자 자격 증명으로 실행되는 서비스 는 주요 업그레이드 시나리오에서 자격 증명을 잃을뿐만 아니라 설정 파일 (표시)이 기본값으로 복원 될 수 있습니다 (실제로 제거 및 재설치). 내 의견으로는 사용자 자격 증명으로 실행되는 서비스는 처음에는 디자인 결함입니다.
  • 공용 속성 이 클라이언트에서 서버 프로세스로 제대로 전달되지 않아 사용자 지정 작업이 예상대로 완료되지 않습니다. 여기에는 SecureCustomActionProperties 특성 업데이트가 포함됩니다.
  • 일부 응용 프로그램은 원래 설치를 설치 한 응용 프로그램 이외의 다른 사용자에게는 제대로 실행되지 않습니다. 이는 심각한 디자인 오류이지만 일반적으로 자체 치료 또는 ActiveSetup 을 사용하여 HKCU 레지스트리 키사용자 프로필 파일 을 추가 하는 숙련 된 응용 프로그램 패키지 관리자가 해결할 수 있습니다 . 이것은 매우 복잡한 주제이며, 작업하려면 약간의 검은 예술이 필요할 수 있습니다. 필자의 의견으로는 실제 해결책은 응용 프로그램 자체를 변경하여 기본 설정 및 컴퓨터 별 위치에서 복사 한 템플릿 또는 응용 프로그램 내부 기본값을 기반으로 모든 사용자 별 설정을 초기화하는 것입니다. 소스 코드).
  • 일부 MSI 파일은 관리자가 아닌 사용자를 위해 여기 저기 어디서나 전체 읽기 / 쓰기 권한을 설정 하여 설치된 파일보안을 손상시킵니다. 다른 경우에는 권한이 없기 때문에 응용 프로그램이 최신 버전의 Windows에서 작동하지 않습니다. 응용 프로그램 패키지 관리자는 응용 프로그램의 사용자 지정 권한 요구 사항을 자주 분석합니다. 일반적으로 HKLM 또는 % ProgramFiles %의 일부 추가 권한이 필요합니다.
  • 당시의 일부 Installshield 설정은 설치 중에 인터넷에 연결하려고합니다. 배포가 엄격하게 제어되고 설치 관리자가 인터넷에서 직접 새 콘텐츠를 다운로드 할 수없는 회사 배포 시나리오에는 끔찍합니다.
  • 또 다른 네트워킹 문제는 설치시 인터넷을 통해 검증 된 데이터를 입력하거나 웹 사이트의 라이브 컨텐츠를 표시하는 GUI를 표시하려고 할 때 발생합니다. 일반적으로 이메일 주소, 연락처 정보, 라이센스 키 등이 있습니다. 회사 환경에서 프록시 구성누락 되어 여러 가지 이유로 연결이 완전히 실패 할 수 있습니다 (인터넷에 직접 연결되어 있지 않고 모든 인터넷 트래픽이 특정 캐시 서버를 통해 라우팅되며 각 프로세스가 방화벽을 통과하기 위해 자격 증명을 제공해야 함) . 다음은 설정을 통한 라이센스 유효성 검사 위험에 대한 기사입니다 .
  • Installscript 언어에 대한 런타임을 설치하는 데 사용되는 Installshield . 이 필수 구성 요소 는 일반적으로 setup.exe에 포함되어 있으며 전설적인 문제의 원인이었습니다 . 많은 버전, 비 호환성 및 많은 런타임 오류 가 발생했습니다. 버전 12 (또는 그 이상) 이후이 런타임은 이제 안정적으로 설치되며 신뢰할 수있는 방식으로 기본 또는 실행중인 샌드 박스 (어느 쪽 샌드 박스인지 확실하지 않습니다)로 컴파일됩니다. 이전 Installshield 설정은이 배포 문제를 표시 할 수 있습니다. 다음과 같은 문제에 대한 Installshield의 레거시 지원 사이트가 있습니다. http://consumer.installshield.com/common.asp
  • 영어 이외의 다른 언어로 설정된 컴퓨터에서 실행하거나 영어 컴퓨터에서 지역화 된 (번역 된) 버전의 설치 프로그램을 실행할 때도 여러 설치에서 잘못된 설치 동작 또는 간헐적 인 버그가 표시 될 수 있습니다. 이것은 순전히 런타임 오류 일 수 있고, 현지화 된 대화 상자 기능이 텍스트 잘라 내기 또는 잘못된 서식 또는 잘못된 번역 또는 언어 현지화 와 관련된 다른 많은 유형의 오류 일 수 있습니다-전문 지식의 전체 영역 (이미지의 텍스트 번역, 소프트웨어 자체 번역, 마케팅 자료 번역, 국제 지원 요청 처리, OS의 언어 설정에 대한 적응 등) 일부 언어는 언어 특성을 설명하기 위해 전체 응용 프로그램을 변경해야합니다. 일반적인 문제는 문자열 매크로 및 코드 페이지 설정이며, 후자는 유니 코드 도입과 관련된 문제가 아닙니다. 번역 도구에서 샘플 스크린 샷을 참조하십시오 .
  • 거의 모든 설정에서 MSI 패키지의 품질을 테스트하는 데 사용할 수 있는 몇 가지 기본 제공 유효성 검사 테스트 가 실패 합니다. 실제 유효성 검사 예제는 이 기사 를 참조하십시오 .
  • 주요 업그레이드 스캔 중에 MSI 버전 번호의 3 자리 만 실제로 확인 되므로 MSI 업그레이드가 실패하는 경우 있습니다.
  • INI 파일 설치는 Windows Installer의 기본 제공 기능입니다. 필요한 방식으로 항목을 추가, 제거, 병합 또는 처리 할 수 ​​있습니다. 그러나 INI 파일은 세그먼트 값 대신 파일로 설치되는 것이 일반적입니다. 이로 인해 재설치하는 동안 업데이트하는 대신 INI 파일을 덮어 쓸 수 있습니다. 매우 일반적인 MSI 문제입니다.
  • 위의 문제는 .NET 응용 프로그램 및 Config.xml 파일의 경우에도 해당됩니다. 이 경우 MSI에는 컨텐츠를 세부적으로 업데이트 할 수있는 기본 제공 방법이 없으므로 사용자 정의 조치를 통해 업데이트를 코딩하거나 설치시 전체 파일을 교체해야합니다. Wix에는이를위한 새로운 기능이있을 수 있지만 Windows Installer 엔진에는이 기능이 내장되어 있지 않습니다.

몇 가지 더 미묘한 오류와 몇 가지 더 크고 전형적인 문제가 있습니다.

MSDNWindows Installer 모범 사례 기사를 확인하십시오 .


답변

MSI를 사용하면 패치 (MSP 파일) 및 업그레이드가 쉬워집니다. MSI는 고유 한 제품 및 업그레이드 코드 개념을 사용하여 전체 프로세스를보다 쉽게 ​​만듭니다.

일부 배포 시스템 (CA Unicenter Software Delivery가 한 예)도 MSI를 특별한 방식으로 이해하여 배포 시스템에 훨씬 더 잘 통합 될 수 있습니다. 예를 들어 MSI를 배포 시스템의 소프트웨어 라이브러리에 공급하면 제품 내의 다양한 기능을 자동으로 감지하고 훨씬 더 세밀한 사용자 지정 작업 (로컬 설치, 확인, 복구 등) 및 로깅을 자동으로 허용합니다.

자가 치유 / 수리 또한 MSI의 주요 장점입니다.


답변

또한 오픈 소스 Windows Installer XML “XML 소스 코드에서 Windows 설치 패키지를 빌드하는 도구 세트를 확인하십시오 . 도구 세트는 개발자가 MSI 및 MSM 설치 패키지를 빌드하기 위해 빌드 프로세스에 통합 할 수있는 명령 줄 환경을 지원합니다.” MS가 여러 주요 소프트웨어 패키지를 준비하는 데 사용합니다.


답변

벤더가 프로그램을 올바르게 패키지 한 경우 최종 사용자와의 상호 작용없이 완전히 자동화 된 배포를 수행 할 수 있습니다. 이는 Windows 환경을 표준화하고 소수의 사용자가 원하는 경우에 매우 유용합니다. 컴퓨터

예를 들어 사람들이 msis 또는 무인 배포로 무엇을하는지 확인하려면 사이트와 포럼을 방문하십시오 .


답변