애플리케이션 사용자 모델 ID(AppUserModelID)

애플리케이션 사용자 모델 ID(AppUserModelIDs)는 Windows 7 이상 시스템의 작업 표시줄에서 프로세스, 파일 및 창을 특정 애플리케이션과 연결하는 데 광범위하게 사용됩니다. 경우에 따라 시스템에서 프로세스에 할당된 내부 AppUserModelID를 사용하는 것으로 충분합니다. 그러나 호스트 프로세스에서 실행되는 여러 프로세스 또는 애플리케이션을 소유하는 애플리케이션은 단일 작업 표시줄 단추 아래에 서로 다른 창을 그룹화하고 해당 애플리케이션의 점프 목록의 내용을 제어할 수 있도록 자신을 명시적으로 식별해야 할 수 있습니다.

AppUserModelIDs Application-Defined 및 System-Defined

일부 애플리케이션은 명시적 AppUserModelID를 선언하지 않습니다. 선택 사항입니다. 이 경우 시스템은 일련의 추론을 사용하여 내부 AppUserModelID를 할당합니다. 그러나 이러한 계산을 방지하는 데는 성능 이점이 있으며 명시적 AppUserModelID가 정확한 사용자 환경을 보장하는 유일한 방법입니다. 따라서 명시적 ID를 설정하는 것이 좋습니다. 애플리케이션은 시스템 할당 AppUserModelID를 검색할 수 없습니다.

애플리케이션에서 명시적 AppUserModelID를 사용하는 경우 실행 중인 모든 창 또는 프로세스, 바로 가기 및 파일 연결에도 동일한 AppUserModelID를 할당해야 합니다. 또한 ICustomDestinationList를 통해 점프 목록을 사용자 지정할 때 및 SHAddToRecentDocs에 대한 모든 호출에서 해당 AppUserModelID를 사용해야 합니다.

참고

애플리케이션에 명시적 AppUserModelID가 없는 경우 애플리케이션 내에서 SHAddToRecentDocs뿐만 아니라 IApplicationDestinations, IApplicationDocumentListsICustomDestinationList 메서드를 호출해야 합니다. 이러한 메서드가 설치 관리자 또는 제거기와 같은 다른 프로세스에서 호출되는 경우 시스템은 올바른 AppUserModelID를 생성할 수 없으며 이러한 호출은 영향을 주지 않습니다.

 

다음 항목에서는 명시적 AppUserModelID가 필요한 일반적인 시나리오에 대해 설명합니다. 또한 여러 명시적 AppUserModelID를 사용해야 하는 경우도 지적합니다.

  • 사용자에게 별도의 애플리케이션으로 표시되는 여러 모드가 있는 UI가 있는 단일 실행 파일은 각 모드에 서로 다른 AppUserModelID를 할당해야 합니다. instance 경우 사용자가 애플리케이션의 나머지 부분과 별도로 작업 표시줄에 고정하고 시작할 수 있는 독립적인 환경으로 표시되는 애플리케이션의 일부에는 기본 환경과는 별도로 자체 AppUserModelID가 있어야 합니다.

  • 사용자가 동일한 애플리케이션으로 보는 내용으로 이어지는 여러 인수가 있는 여러 바로 가기는 모든 바로 가기에 하나의 AppUserModelID를 사용해야 합니다. 예를 들어 Windows Internet Explorer 다양한 모드(예: 추가 기능 없이 시작)에 대해 서로 다른 바로 가기가 있지만 모두 사용자에게 단일 인터넷 Explorer instance 표시되어야 합니다.

  • 호스트 프로세스 역할을 하고 대상 콘텐츠를 애플리케이션으로 실행하는 실행 파일은 호스트 애플리케이션으로 등록되어야 하며, 그 후에는 호스트가 호스트하는 인식된 각 환경에 다른 AppUserModelID를 할당할 수 있습니다. 또는 호스트 프로세스에서 호스트 프로그램이 AppUserModelID를 설정하도록 허용할 수 있습니다. 두 경우 모두 호스트 프로세스는 자체 또는 호스트된 애플리케이션인 AppUserModelIDs 원본의 레코드를 유지해야 합니다. 이 경우 대상 콘텐츠가 없는 호스트 프로세스의 기본 사용자 환경은 없습니다. 예를 들어 RAIL(Windows Remote Applications Integrated Locally) 애플리케이션, Java 런타임, RunDLL32.exe 또는 DLLHost.exe 있습니다.

    기존 호스팅 애플리케이션의 경우 시스템은 개별 환경을 식별하려고 시도하지만 새 애플리케이션은 명시적 AppUserModelID를 사용하여 의도한 사용자 환경을 보장해야 합니다.

  • 사용자에게 동일한 애플리케이션의 일부인 협조적 또는 연결된 프로세스는 각 프로세스에 동일한 AppUserModelID를 적용해야 합니다. 예를 들어 시작 관리자 프로세스(연결됨)가 있는 게임과 한 프로세스에서 실행되는 첫 번째 실행/설정 환경과 다른 프로세스(협조적)에서 실행되는 기본 애플리케이션이 있는 Microsoft Windows 미디어 플레이어 등이 있습니다.

  • Windows Explorer 콘텐츠를 검색하고 관리하는 것 이상의 별도의 애플리케이션 역할을 하는 셸 네임스페이스 확장은 해당 폴더 속성에 AppUserModelID를 할당해야 합니다. 예를 들어 제어판.

  • 배포 프레임워크와 같은 가상화 환경에서 가상화 환경은 관리하는 각 애플리케이션에 서로 다른 AppUserModelID를 할당해야 합니다. 이러한 경우 애플리케이션 시작 관리자는 중간 프로세스를 사용하여 환경을 설정한 다음, 다른 프로세스로 작업을 실행하여 애플리케이션을 실행합니다. 이로 인해 바로 가기가 중간 프로세스를 가리키기 때문에 실행 중인 대상 프로세스를 바로 가기로 다시 연결할 수 없습니다.

    애플리케이션에 여러 창, 바로 가기 또는 프로세스가 있는 경우 해당 애플리케이션의 할당된 AppUserModelID도 가상화 환경에서 각 조각에 적용해야 합니다.

    이 상황의 예로는 관리하는 애플리케이션을 대신하여 AppUserModelID를 올바르게 할당하는 ClickOnce 프레임워크가 있습니다. 이러한 모든 환경에서와 마찬가지로 ClickOnce에서 배포 및 관리하는 애플리케이션은 명시적 AppUserModelID를 직접 할당하면 안 됩니다. 이렇게 하면 ClickOnce에서 할당한 AppUserModelID와 충돌하여 예기치 않은 결과가 발생하기 때문입니다.

Application-Defined AppUserModelID를 형성하는 방법

애플리케이션은 다음 형식으로 AppUserModelID를 제공해야 합니다. 128자를 초과할 수 없으며 공백을 포함할 수 없습니다. 각 섹션은 파스칼 대/소문자여야 합니다.

CompanyName.ProductName.SubProduct.VersionInformation

CompanyNameProductNameVersionInformation 부분은 선택 사항이며 애플리케이션의 요구 사항에 따라 달라지지만 SubProduct 및 는 항상 사용해야 합니다. SubProduct에서는 여러 하위 애플리케이션으로 구성된 기본 애플리케이션이 각 하위 응용 프로그램 및 관련 창에 대해 별도의 작업 표시줄 단추를 제공할 수 있습니다. VersionInformation 을 사용하면 개별 엔터티로 표시되는 동안 두 버전의 애플리케이션이 공존할 수 있습니다. 애플리케이션이 이러한 방식으로 VersionInformation 사용되지 않을 경우 업그레이드된 버전이 교체된 버전과 동일한 AppUserModelID를 사용할 수 있도록 을 생략해야 합니다.

AppUserModelID를 할당할 위치

애플리케이션에서 하나 이상의 명시적 AppUserModelID를 사용하는 경우 다음 위치 및 상황에서 해당 AppUserModelID를 적용해야 합니다.

  • 애플리케이션 바로 가기 파일의 System.AppUserModel.ID 속성에 있습니다. 바로 가기( IShellLink, CLSID_ShellLink 또는 .lnk 파일)는 IPropertyStore 및 셸 전체에서 사용되는 기타 속성 설정 메커니즘을 통해 속성을 지원합니다. 이렇게 하면 작업 표시줄에서 고정할 적절한 바로 가기를 식별하고 프로세스에 속하는 창이 해당 작업 표시줄 단추와 적절하게 연결되도록 할 수 있습니다.

    참고

    System.AppUserModel.ID 속성은 바로 가기를 만들 때 바로 가기에 적용해야 합니다. MSI(Microsoft Windows Installer)를 사용하여 애플리케이션을 설치하는 경우 MsiShortcutProperty 테이블을 사용하면 설치 중에 AppUserModelID를 만들 때 바로 가기에 적용할 수 있습니다.

     

  • 애플리케이션의 실행 중인 창의 속성입니다. 다음 두 가지 방법 중 하나로 설정할 수 있습니다.

    1. 한 프로세스에서 소유한 다른 창에 작업 표시줄 그룹화 제어를 위해 다른 AppUserModelID가 필요한 경우 SHGetPropertyStoreForWindow)를 사용하여 창의 속성 저장소를 검색하고 AppUserModelID를 창 속성으로 설정합니다.
    2. 프로세스의 모든 창에서 동일한 AppUserModelID를 사용하는 경우 SetCurrentProcessExplicitAppUserModelID를 통해 프로세스에서 AppUserModelID를 설정합니다. 애플리케이션은 SetCurrentProcessExplicitAppUserModelID 를 호출하여 애플리케이션이 UI를 표시하거나, 점프 목록을 조작하거나, SHAddToRecentDocs에 대한 호출을 만들거나 시스템이 호출하도록 하기 전에 애플리케이션의 초기 시작 루틴 중에 해당 AppUserModelID를 설정해야 합니다.

    창 수준 AppUserModelID는 프로세스 수준 AppUserModelID를 재정의합니다.

    애플리케이션이 창 수준에서 명시적 AppUserModelID를 설정하는 경우 애플리케이션은 해당 작업 표시줄 단추에 대한 해당 다시 시작 명령의 세부 정보를 제공할 수 있습니다. 해당 정보를 제공하기 위해 다음 속성이 사용됩니다.

    참고

    애플리케이션을 시작하기 위한 바로 가기가 있는 경우 애플리케이션은 다시 시작 속성을 사용하는 대신 AppUserModelID를 바로 가기의 속성으로 적용해야 합니다. 이 경우 바로 가기의 명령줄, 아이콘 및 텍스트가 다시 시작 속성과 동일한 정보를 제공하는 데 사용됩니다.

     

    창 수준 명시적 AppUserModelID는 System.AppUserModel.PreventPinning 속성을 사용하여 고정 또는 다시 시작에 사용할 수 없도록 지정할 수도 있습니다.

  • 사용자 지정 또는 업데이트 호출(ICustomDestinationList), 검색(IApplicationDocumentLists) 또는 애플리케이션의 점프 목록(IApplicationDestinations)을 지웁니다.

  • 애플리케이션이 시스템의 자동으로 생성된 최근 또는 빈번한 대상 목록을 사용하는 경우 파일 연결 등록(ProgID를 통해)에서. 이 연결 정보는 SHAddToRecentDocs에서 참조됩니다. 이 정보는 ICustomDestinationList::AppendCategory를 통해 사용자 지정 점프 목록에 IShellItem 대상을 추가할 때도 사용됩니다.

  • 모든 호출에서 애플리케이션은 SHAddToRecentDocs에 직접 만듭니다. 애플리케이션이 SHAddToRecentDocs 를 대신 호출하기 위해 공통 파일 대화 상자에 의존하는 경우 이러한 호출은 AppUserModelID가 전체 프로세스에 대해 설정된 경우에만 명시적 AppUserModelID를 추론할 수 있습니다. 애플리케이션이 프로세스 대신 해당 창에서 AppUserModelIDs를 설정하는 경우 애플리케이션은 명시적 AppUserModelID를 사용하여 SHAddToRecentDocs 자체에 대한 모든 호출을 수행해야 하며 공통 파일 대화 상자가 자체 호출을 수행하지 못하도록 해야 합니다. 애플리케이션 점프 목록의 최근 또는 자주 사용하는 섹션이 정확한지 확인하려면 항목을 열 때마다 이 작업을 수행해야 합니다.

다음 항목에서는 일반적인 시나리오와 이러한 시나리오에서 명시적 AppUserModelID를 적용할 위치를 설명합니다.

  • 단일 프로세스에 여러 애플리케이션이 포함된 경우 SHGetPropertyStoreForWindow 를 사용하여 창의 속성 저장소를 검색하고 AppUserModelID를 창 속성으로 설정합니다.
  • 애플리케이션에서 여러 프로세스를 사용하는 경우 각 프로세스에 AppUserModelID를 적용합니다. 각 프로세스에서 동일한 AppUserModelID를 사용하는지 여부는 각 프로세스를 기본 애플리케이션의 일부로 표시할지 또는 개별 엔터티로 표시할지에 따라 달라집니다.
  • 동일한 프로세스의 집합에서 특정 창을 분리하려면 창의 속성 저장소를 사용하여 분리하려는 창에 단일 AppUserModelID를 적용한 다음 프로세스에 다른 AppUserModelID를 적용합니다. 창 수준 AppUserModelID로 명시적으로 레이블이 지정되지 않은 해당 프로세스의 모든 창은 프로세스의 AppUserModelID를 상속합니다.
  • 파일 형식이 애플리케이션과 연결된 경우 파일 형식의 ProgID 등록에서 AppUserModelID를 할당합니다. 단일 실행 파일이 사용자에게 고유한 애플리케이션으로 표시되는 다른 모드로 시작되는 경우 각 모드에 대해 별도의 AppUserModelID가 필요합니다. 이 경우 파일 형식에 대해 각각 다른 AppUserModelID를 사용하는 여러 ProgID 등록이 있어야 합니다.
  • 사용자가 애플리케이션을 시작할 수 있는 바로 가기 위치가 여러 개 있는 경우( 시작 메뉴, 데스크톱 또는 다른 위치에서) 바로 가기의 속성 저장소를 검색하여 모든 바로 가기 속성에 단일 AppUserModelID를 바로 가기 속성으로 적용합니다.
  • 애플리케이션에서 SHAddToRecentDocs 를 명시적으로 호출하는 경우 호출에서 AppUserModelID를 사용합니다. 공용 파일 대화 상자를 사용하여 파일을 열거나 저장하는 경우 SHAddToRecentDocs 는 애플리케이션을 대신하여 대화 상자에서 호출됩니다. 이 호출은 프로세스에서 명시적 AppUserModelID를 유추할 수 있습니다. 그러나 명시적 AppUserModelID가 창 속성으로 적용되는 경우 일반 파일 대화 상자에서 올바른 AppUserModelID를 확인할 수 없습니다. 이 경우 애플리케이션 자체는 SHAddToRecentDocs 를 명시적으로 호출하고 올바른 AppUserModelID를 제공해야 합니다. 또한 애플리케이션은 IFileOpenDialog 또는 IFileSaveDialogGetOptions 메서드에서 FOS_DONTADDTORECENT 플래그를 설정하여 일반 파일 대화 상자가 대신 SHAddToRecentDocs를 호출하지 못하도록 해야 합니다.

호스트 프로세스로 애플리케이션 등록

애플리케이션은 IsHostApp 레지스트리 항목을 설정하여 실행 파일의 프로세스가 작업 표시줄에서 호스트 프로세스로 간주되도록 할 수 있습니다. 이는 그룹화 및 기본 점프 목록 항목에 영향을 줍니다.

다음 예제에서는 필요한 레지스트리 항목을 보여줍니다. 항목에 값이 할당되지 않았습니다. 해당 존재는 필수입니다. REG_NULL 값입니다.

HKEY_CLASSES_ROOT
   Applications
      example.exe
         IsHostApp

프로세스 자체 또는 프로세스를 시작하는 데 사용되는 바로 가기 파일에 명시적 AppUserModelID가 있는 경우 호스트 프로세스 목록이 무시되고 애플리케이션이 작업 표시줄에서 일반 애플리케이션으로 처리됩니다. 애플리케이션의 실행 중인 창은 단일 작업 표시줄 단추 아래에 그룹화되며 애플리케이션을 작업 표시줄에 고정할 수 있습니다.

실행 중인 프로세스의 실행 파일 이름만 명시적 AppUserModelID 없이 알려져 있고 해당 실행 파일이 호스트 프로세스 목록에 있는 경우 프로세스의 각 instance 작업 표시줄 그룹화에 대한 별도의 엔터티로 처리됩니다. 프로세스의 특정 instance 연결된 작업 표시줄 단추에는 프로세스의 새 instance 대한 고정/고정 해제 옵션 또는 시작 아이콘이 표시되지 않습니다. 이 프로세스는 시작 메뉴의 MFU(가장 자주 사용되는) 목록에 포함할 수 없습니다. 그러나 시작 인수(일반적으로 "애플리케이션"으로 호스트할 대상 콘텐츠)가 포함된 바로 가기를 통해 프로세스가 시작된 경우 시스템은 ID를 확인할 수 있으며 애플리케이션을 고정하고 다시 시작할 수 있습니다.

작업 표시줄 고정 및 최근/빈번한 목록에 대한 제외 목록

애플리케이션, 프로세스 및 창은 작업 표시줄에 고정하거나 시작 메뉴의 MFU 목록에 포함할 수 없도록 선택할 수 있습니다. 이 작업을 수행하는 세 가지 메커니즘이 있습니다.

  1. 다음과 같이 애플리케이션 등록에 NoStartPage 항목을 추가합니다.

    HKEY_CLASSES_ROOT
       Applications
          Example.exe
             NoStartPage
    

    NoStartPage 항목과 연결된 데이터는 무시됩니다. 항목의 존재만 필요합니다. 따라서 NoStartPage에 이상적인 형식은 REG_NONE.

    명시적 AppUserModelID를 사용하면 NoStartPage 항목이 재정의됩니다. 명시적 AppUserModelID가 바로 가기, 프로세스 또는 창에 적용되면 고정 가능하고 시작 메뉴 MFU 목록에 적합합니다.

  2. Windows 및 바로 가기에서 System.AppUserModel.PreventPinning 속성을 설정합니다. 이 속성은 PKEY_AppUserModel_ID 속성 앞에 창에서 설정해야 합니다.

  3. 다음과 같이 명시적 AppUserModelID를 다음 레지스트리 하위 키 아래에 값으로 추가합니다.

    HKEY_LOCAL_MACHINE
       Software
          Microsoft
             Windows
                CurrentVersion
                   Explorer
                      FileAssociation
                         NoStartPageAppUserModelIDs
                            AppUserModelID1
                            AppUserModelID2
                            AppUserModelID3
    

    각 항목은 AppUserModelID의 이름을 가진 REG_NULL 값입니다. 이 목록에 있는 AppUserModelID는 고정할 수 없으며 시작 메뉴 MFU 목록에 포함할 수 없습니다.

특정 실행 파일과 해당 이름에 특정 문자열이 포함된 바로 가기는 MFU 목록에 고정 및 포함에서 자동으로 제외됩니다.

참고

이 자동 제외는 명시적 AppUserModelID를 적용하여 재정의할 수 있습니다.

 

대/소문자와 관계없이 다음 문자열이 바로 가기 이름에 포함된 경우 프로그램은 고정할 수 없으며 가장 자주 사용되는 목록에 표시되지 않습니다(Windows 10 적용할 수 없음).

  • 설명서
  • 도움말
  • 설치
  • 자세한 정보
  • 읽기
  • 먼저 읽기
  • 추가 정보
  • 제거
  • 설정
  • 지원
  • What's New

다음 프로그램 목록은 고정할 수 없으며 가장 자주 사용되는 목록에서 제외됩니다.

  • Applaunch.exe
  • Control.exe
  • Dfsvc.exe
  • Dllhost.exe
  • Guestmodemsg.exe
  • Hh.exe
  • Install.exe
  • Isuninst.exe
  • Lnkstub.exe
  • Mmc.exe
  • Mshta.exe
  • Msiexec.exe
  • Msoobe.exe
  • Rundll32.exe
  • Setup.exe
  • St5unst.exe
  • Unwise.exe
  • Unwise32.exe
  • Werfault.exe
  • Winhlp32.exe
  • Wlrmdr.exe
  • Wuapp.exe

위의 목록은 다음 레지스트리 값에 저장됩니다.

참고

이러한 목록은 애플리케이션에서 수정해서는 안 됩니다. 동일한 환경에 대해 이전에 나열된 제외 목록 메서드 중 하나를 사용합니다.

 

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FileAssociation
                     AddRemoveApps
                     HostApps

SetCurrentProcessExplicitAppUserModelID

GetCurrentProcessExplicitAppUserModelID

작업 표시줄 확장

ICustomDestinationList::SetAppID

IApplicationDocumentLists::SetAppID

IApplicationDestinations::SetAppID

SHGetPropertyStoreForWindow