단일 패키지 작성

이중 용도 패키지는 사용자별 또는 컴퓨터별 설치 컨텍스트에서 애플리케이션을 설치할 수 있도록 제작된 Windows Installer 5.0 패키지입니다. 애플리케이션에 이중 용도 패키지를 사용하는 설치 개발자는 설치 시 사용자에게 설치 컨텍스트 선택 옵션을 제공할 수 있으며 Windows 7 또는 Windows Server 2008 R2의 사용자별 설치에서 UAC 자격 증명 프롬프트를 제거할 수 있습니다. Windows 7 및 Windows Server 2008 R2에 설치하기 위한 이중 용도 Windows Installer 5.0 패키지 개발을 단일 패키지 제작이라고 합니다.

Windows 7 및 Windows Server 2008 R2용 이중 용도 패키지 개발은 Windows Installer 5.0, MSIINSTALLPERUSER 속성, ALLUSERS 속성, 사용자별 지원 알려진 폴더 및 Windows 셸 등록을 사용하여 시작할 수 있습니다. Windows Installer 5.0이 Windows 7 또는 Windows Server 2008 R2의 사용자별 컨텍스트에서 이중 용도 패키지를 설치하는 경우 설치 관리자는 파일 및 레지스트리 항목을 사용자별 위치로 지정하고 자격 증명에 대한 UAC 프롬프트를 표시하지 않습니다. Windows Installer 5.0이 컴퓨터별 컨텍스트에서 이중 용도 패키지를 설치하는 경우 설치 관리자는 파일 및 레지스트리 항목을 컴퓨터별 위치로 지정하고 UAC 자격 증명을 묻는 메시지를 표시하여 사용자에게 컴퓨터의 모든 사용자를 위해 소프트웨어를 설치할 수 있는 충분한 권한이 있는지 확인합니다. Windows Installer 5.0이 애플리케이션을 설치하면 애플리케이션의 모든 후속 업데이트, 복구 또는 제거에 동일한 설치 컨텍스트를 사용합니다.

Windows Installer 4.5 이하:ProgramFilesFolder, CommonFilesFolder, ProgramFiles64Folder, CommonFiles64Folder 속성에서 참조하는 폴더의 사용자별 버전 및 MSIINSTALLPERUSER 속성은 지원되지 않습니다. FOLDERID_UserProgramFilesFOLDERID_UserProgramFilesCommon 폴더는 Windows 7 및 Windows Server 2008 R2부터 사용할 수 있습니다. 즉, Windows Installer 4.5 이하 버전용으로 개발된 설치는 FOLDERID_ProgramFiles, FOLDERID_ProgramFilesCommon, FOLDERID_ProgramFilesX64, FOLDERID_ProgramFilesCommonX64에 대한 파일 및 레지스트리 항목을 지정합니다. 이러한 위치는 컴퓨터의 다른 사용자가 액세스할 수 있는 위치이기 때문에 Windows Vista 이상 시스템에서는 자격 증명에 대한 UAC 프롬프트를 표시해야 합니다.

사용자가 Windows Installer 4.5 이하 버전과 함께 Windows Installer 5.0용으로 제작된 이중 용도 패키지를 설치하는 경우, 설치 관리자는 MSIINSTALLPERUSER 속성을 무시합니다. 이런 경우 설치는 파일 및 레지스트리 항목을 다른 사용자가 액세스할 수 있는 위치로 지정할 수 있으며 시스템에서 자격 증명에 대한 UAC 프롬프트를 표시하도록 요구할 수 있습니다. Windows Installer 5.0은 Windows Installer 4.5 이하용으로 개발된 패키지를 설치할 수 있지만 설치는 파일 및 레지스트리 항목을 다른 사용자가 액세스할 수 있는 위치로 지정하고 시스템에서 자격 증명에 대한 UAC 프롬프트를 표시하도록 요구합니다.

개발 지침

다음 단일 패키지 작성 지침을 준수하여 사용자별 또는 컴퓨터별 컨텍스트에서 패키지를 설치할 수 있는지 확인합니다. 다음 지침에 따라 사용자가 설치 시 사용자별 또는 컴퓨터별 설치를 선택하고 사용자별 설치에서 UAC 프롬프트를 제거할 수 있도록 합니다.

  • 사용자별 설치에는 Windows 7 또는 Windows Server 2008 R2에 Windows Installer 5.0이 필요합니다. 이전 버전의 시스템에서는 패키지가 애플리케이션의 컴퓨터별 설치를 지원한다는 것을 사용자에게 알려야 합니다.

  • 이중 용도 패키지의 Property 테이블에서 ALLUSERSMSIINSTALLPERUSER 속성 값을 초기화합니다. ALLUSERS 값 2와 MSIINSTALLPERUSER 값 1을 초기 값으로 사용합니다. 이렇게 하면 사용자별 설치가 이중 용도 패키지의 기본값으로 지정됩니다.

  • 설치 시 사용자가 컨텍스트를 선택할 수 있도록 이중 용도 패키지의 사용자 인터페이스에 대한 대화 상자를 작성하는 것이 좋습니다. 이 사용자 지정 대화 상자에 컨트롤을 작성하여 ALLUSERSMSIINSTALLPERUSER 속성의 값을 설정합니다. ALLUSERS 값이 2인 경우 MSIINSTALLPERUSER를 값 1로 설정하여 사용자별 설치를 지정하고 MSIINSTALLPERUSER를 빈 문자열("")로 설정하여 컴퓨터별 설치를 지정합니다. 명령줄에서 패키지를 설치하는 경우 사용자가 명령줄에서 ALLUSERSMSIINSTALLPERUSER를 설정할 수도 있습니다.

  • 내부 일관성 평가기 - ICE를 사용하여 패키지의 유효성을 검사합니다. 유효한 이중 용도 패키지가 되려면 패키지가 ICE105의 유효성 검사를 통과할 수 있어야 합니다.

  • Registry TableRemoveRegistry Table을 사용하여 사용자별 설치 중에 레지스트리 항목을 레지스트리의 사용자별 부분으로 리디렉션합니다. 사용자별 설치에서 Root 열에 -1이 있는 레지스트리 항목은 HKEY_CURRENT_USER로 리디렉션되고 컴퓨터별 설치에서는 HKEY_LOCAL_MACHINE으로 리디렉션됩니다. 사용자별 설치에서 Root 열에 msidbRegistryRootClassesRoot(0)가 있는 레지스트리 항목은 HKCU\Software\Classes로 리디렉션됩니다. 컴퓨터별 설치에서는HKLM\Software\Classes로 전달됩니다.

  • 32비트 Windows Installer 패키지Directory 테이블에서 ProgramFilesFolder 속성을 사용하여 애플리케이션 간에 공유되지 않는 32비트 구성 요소가 포함된 디렉터리의 위치를 지정합니다. 사용자가 컴퓨터별 컨텍스트를 사용하여 이중 용도 패키지를 설치하면 이러한 구성 요소는 Windows 32비트 버전의 경우 Program Files 폴더에, 64비트 버전 시스템의 경우 Program Files(x86) 폴더에 저장됩니다. 이러한 디렉터리에 있는 구성 요소는 모든 사용자가 액세스할 수 있습니다. 사용자가 사용자별 컨텍스트를 사용하여 Windows 7 또는 Windows Server 2008 R2에 이중 용도 패키지를 설치하는 경우, 이러한 구성 요소는 현재 사용자의 Programs 폴더(예: %LocalAppData%\Programs)에 저장되며 해당 사용자만 액세스할 수 있습니다.

  • 32비트 Windows Installer 패키지Directory 테이블에서 CommonFilesFolder 속성을 사용하여 애플리케이션 간에 공유되는 32비트 구성 요소가 포함된 디렉터리의 위치를 지정합니다. 사용자가 컴퓨터별 컨텍스트를 사용하여 이중 용도 패키지를 설치하는 경우 이러한 구성 요소는 Common Files 폴더에 저장되며 모든 사용자가 액세스할 수 있습니다. 사용자가 사용자별 컨텍스트를 사용하여 Windows 7 또는 Windows Server 2008 R2에 이중 용도 패키지를 설치하는 경우 이러한 구성 요소는 현재 사용자의 Common 폴더(예: %LocalAppData%\Programs\Common)에 저장되며 해당 사용자만 액세스할 수 있습니다.

  • 64비트 Windows Installer 패키지Directory 테이블에서 ProgramFiles64Folder 속성을 사용하여 애플리케이션 간에 공유되지 않는 64비트 구성 요소가 포함된 디렉터리의 위치를 지정합니다. 사용자가 컴퓨터별 컨텍스트를 사용하여 이중 용도 패키지를 설치하는 경우 이러한 구성 요소는 Program Files 폴더에 저장됩니다. 이러한 디렉터리에 있는 구성 요소는 모든 사용자가 액세스할 수 있습니다. 사용자가 사용자별 컨텍스트를 사용하여 Windows 7 또는 Windows Server 2008 R2에 이중 용도 패키지를 설치하는 경우, 이러한 구성 요소는 현재 사용자의 Programs 폴더(예: %LocalAppData%\Programs)에 저장되며 해당 사용자만 액세스할 수 있습니다. 64비트 운영 체제에 애플리케이션을 설치하는 패키지를 작성하는 방법에 대한 자세한 내용은 64비트 운영 체제의 Windows Installer를 참조하세요.

  • 64비트 Windows Installer 패키지Directory 테이블에서 CommonFiles64Folder 속성을 사용하여 애플리케이션 간에 공유되는 64비트 구성 요소가 포함된 디렉터리의 위치를 지정합니다. 사용자가 컴퓨터별 컨텍스트를 사용하여 이중 용도 패키지를 설치하는 경우 이러한 구성 요소는 Common Files 폴더에 저장되며 모든 사용자가 액세스할 수 있습니다. 사용자가 사용자별 컨텍스트를 사용하여 Windows 7 또는 Windows Server 2008 R2에 이중 용도 패키지를 설치하는 경우 이러한 구성 요소는 현재 사용자의 Common 폴더(예: %LocalAppData%\Programs\Common)에 저장되며 해당 사용자만 액세스할 수 있습니다.

  • 64비트 Windows Installer 패키지Directory 테이블에서 ProgramFilesFolderCommonFilesFolder 속성을 사용하여 32비트 구성 요소가 포함된 디렉터리의 위치를 지정합니다. 동일한 이름으로 제공되는 구성 요소의 32비트 및 64비트 버전에 다른 이름을 사용하거나 다른 폴더에 버전을 저장합니다. 예를 들어 32비트 버전이 포함된 디렉터리의 위치를 [ProgramFilesFolder]\ISV 이름\애플리케이션 이름\x86으로 지정하고, 64비트 버전이 포함된 디렉터리의 위치를 [Program64FilesFolder]\ISV 이름\애플리케이션 이름\x64로 지정하는 정보를 Directory 테이블에 추가합니다. 그러면 컴퓨터별 설치는 Program Files(x86)\ISV 이름\애플리케이션 이름\x86에 32비트 버전을 저장하고 Program Files\ISV 이름\애플리케이션 이름\x64에 64비트 버전을 저장합니다. 사용자별 설치는 32비트 버전을 %LocalAppData%\Programs\ISV 이름\애플리케이션 이름\x86에 저장하고 64비트 버전을 %LocalAppData%\Programs\ISV 이름\애플리케이션 이름\x64에 설치합니다.

  • 애플리케이션의 사용자별 구성 데이터는 \Users\username\AppData에 저장합니다.

  • 애플리케이션에서 생성된 템플릿 및 파일은 \Users\username 아래 하위 폴더에 저장합니다.

  • 애플리케이션에서 셸 확장을 사용하는 경우에는 Windows 7 또는 Windows Server 2008 R2부터 사용할 수 있는 사용자별 지원 셸 확장성 지점을 사용해야 합니다.

  • 실행하려면 상승된 권한이 필요한 사용자 지정 작업은 패키지에 사용하지 마세요. CustomAction 테이블에는 상승된 권한으로 실행되도록 표시된 사용자 지정 작업이 없어야 합니다. 상승된 권한 사용자 지정 작업에 대한 자세한 내용은 사용자 지정 작업 보안을 참조하세요.

  • 전역 시스템 폴더에는 쓰지 마세요. 디렉터리 테이블에는 다음 시스템 폴더 속성에 대한 참조가 포함되어서는 안 됩니다.

AdminToolsFolder
CommonAppDataFolder
FontsFolder
System16Folder
System64Folder
SystemFolder
TempFolder
WindowsFolder
WindowsVolume

  • GAC(전역 어셈블리 캐시)에 공용 언어 런타임 어셈블리를 설치하지 마세요. 전역 어셈블리 캐시에 어셈블리를 설치하는 방법에 대한 자세한 내용은 패키지에 어셈블리 추가공용 언어 런타임 어셈블리 설치를 참조하세요.
  • ODBC 데이터 원본을 설치하지 마세요. ODBCDataSource 테이블을 사용하여 데이터 원본을 설치하지 마세요.
  • 서비스를 설치하지 마세요. ServiceInstall 테이블을 사용하여 서비스를 설치하지 마세요.

이중 용도 패키지의 예는 Windows Installer 개발자용 Windows SDK 구성 요소에 PUASample1.msi 파일로 제공됩니다. 현재 SDK가 있으면 샘플 설치 패키지를 재현하는 데 필요한 모든 도구와 데이터에 액세스할 수 있습니다. 이 예에 대한 자세한 내용은 단일 패키지 작성 예를 참조하세요.