ID Model Pengguna Aplikasi (AppUserModelIDs)

ID Model Pengguna Aplikasi (AppUserModelIDs) digunakan secara ekstensif oleh taskbar di Windows 7 dan sistem yang lebih baru untuk mengaitkan proses, file, dan jendela dengan aplikasi tertentu. Dalam beberapa kasus, cukup untuk mengandalkan AppUserModelID internal yang ditetapkan ke proses oleh sistem. Namun, aplikasi yang memiliki beberapa proses atau aplikasi yang berjalan dalam proses host mungkin perlu secara eksplisit mengidentifikasi dirinya sendiri sehingga dapat mengelompokkan jendela yang berbeda di bawah satu tombol taskbar dan mengontrol konten Jump List aplikasi tersebut.

Application-Defined dan System-Defined AppUserModelIDs

Beberapa aplikasi tidak mendeklarasikan AppUserModelID eksplisit. Mereka bersifat opsional. Dalam hal ini, sistem menggunakan serangkaian heuristik untuk menetapkan AppUserModelID internal. Namun, ada manfaat performa dalam menghindari perhitungan tersebut dan AppUserModelID eksplisit adalah satu-satunya cara untuk menjamin pengalaman pengguna yang tepat. Oleh karena itu, sangat disarankan agar ID eksplisit ditetapkan. Aplikasi tidak dapat mengambil AppUserModelID yang ditetapkan sistem.

Jika aplikasi menggunakan AppUserModelID eksplisit, aplikasi juga harus menetapkan AppUserModelID yang sama ke semua jendela atau proses, pintasan, dan asosiasi file yang berjalan. Ini juga harus menggunakan AppUserModelID saat menyesuaikan Jump List melalui ICustomDestinationList, dan dalam panggilan apa pun ke SHAddToRecentDocs.

Catatan

Jika aplikasi tidak memiliki AppUserModelID eksplisit, aplikasi harus memanggil metode IApplicationDestinations, IApplicationDocumentLists, dan ICustomDestinationList serta SHAddToRecentDocs dari dalam aplikasi. Jika metode tersebut dipanggil dari proses lain, seperti penginstal atau uninstaller, sistem tidak dapat menghasilkan AppUserModelID yang benar dan panggilan tersebut tidak akan berpengaruh.

 

Item berikut menjelaskan skenario umum yang memerlukan AppUserModelID eksplisit. Mereka juga menunjukkan kasus di mana beberapa AppUserModelID eksplisit harus digunakan.

  • Satu file yang dapat dieksekusi dengan UI dengan beberapa mode yang muncul kepada pengguna sebagai aplikasi terpisah harus menetapkan AppUserModelID yang berbeda ke setiap mode. Misalnya, sebagian aplikasi yang dilihat pengguna sebagai pengalaman independen yang dapat mereka sematkan ke dan luncurkan dari taskbar secara terpisah dari aplikasi lainnya harus memiliki AppUserModelID sendiri, terpisah dari pengalaman utama.

  • Beberapa pintasan dengan argumen berbeda yang semuanya mengarah pada apa yang dilihat pengguna sebagai aplikasi yang sama harus menggunakan satu AppUserModelID untuk semua pintasan. Misalnya, Windows Internet Explorer memiliki pintasan yang berbeda untuk mode yang berbeda (seperti meluncurkan tanpa add-on) tetapi semuanya akan muncul kepada pengguna sebagai instans Internet Explorer tunggal.

  • Executable yang bertindak sebagai proses host dan menjalankan konten target sebagai aplikasi harus mendaftar sebagai aplikasi host, setelah itu dapat menetapkan AppUserModelID yang berbeda ke setiap pengalaman yang dirasakan yang dihostingnya. Secara bergantian, proses host dapat memungkinkan program yang dihosting untuk mengatur AppUserModelIDs-nya. Dalam kedua kasus, proses host harus menyimpan catatan sumber AppUserModelIDs, baik itu sendiri atau aplikasi yang dihosting. Dalam hal ini, tidak ada pengalaman pengguna utama dari proses host tanpa konten target. Contohnya adalah aplikasi Windows Remote Applications Integrated Locally (RAIL), Java Runtime, RunDLL32.exe, atau DLLHost.exe.

    Dalam kasus aplikasi yang dihosting yang ada, sistem mencoba mengidentifikasi pengalaman individu, tetapi aplikasi baru harus menggunakan AppUserModelIDs eksplisit untuk menjamin pengalaman pengguna yang dimaksudkan.

  • Proses kooperatif atau berantai yang kepada pengguna adalah bagian dari aplikasi yang sama harus memiliki AppUserModelID yang sama yang diterapkan pada setiap proses. Contohnya termasuk game dengan proses peluncur (berantai) dan Microsoft Pemutar Media Windows, yang memiliki pengalaman eksekusi/penyiapan pertama yang berjalan dalam satu proses dan aplikasi utama yang berjalan dalam proses lain (kooperatif).

  • Ekstensi namespace Shell yang bertindak sebagai aplikasi terpisah untuk lebih dari menelusuri dan mengelola konten di Windows Explorer harus menetapkan AppUserModelID di properti foldernya. Contohnya adalah Panel Kontrol.

  • Dalam lingkungan virtualisasi seperti kerangka kerja penyebaran, lingkungan virtualisasi harus menetapkan AppUserModelID yang berbeda ke setiap aplikasi yang dikelolanya. Dalam kasus ini, peluncur aplikasi menggunakan proses perantara untuk mengatur lingkungan dan kemudian menyerahkan operasi ke proses yang berbeda untuk menjalankan aplikasi. Perhatikan bahwa ini menyebabkan sistem tidak dapat menghubungkan proses target yang sedang berjalan kembali ke pintasan karena pintasan menunjuk ke proses perantara.

    Jika ada aplikasi yang memiliki beberapa jendela, pintasan, atau proses, AppUserModelID yang ditetapkan aplikasi tersebut juga harus diterapkan ke masing-masing bagian tersebut oleh lingkungan virtualisasi.

    Contoh situasi ini adalah kerangka kerja ClickOnce, yang menetapkan AppUserModelID dengan benar atas nama aplikasi yang dikelolanya. Seperti di semua lingkungan tersebut, aplikasi yang disebarkan dan dikelola oleh ClickOnce tidak boleh menetapkan AppUserModelIDs eksplisit itu sendiri, karena melakukannya akan bertentangan dengan AppUserModelID yang ditetapkan oleh ClickOnce dan menyebabkan hasil yang tidak terduga.

Cara Membentuk AppUserModelID Application-Defined

Aplikasi harus menyediakan AppUserModelID-nya dalam bentuk berikut. Ini tidak boleh memiliki lebih dari 128 karakter dan tidak boleh berisi spasi. Setiap bagian harus pascal-cased.

CompanyName.ProductName.SubProduct.VersionInformation

CompanyName dan ProductName harus selalu digunakan, sementara SubProduct bagian dan VersionInformation bersifat opsional dan bergantung pada persyaratan aplikasi. SubProduct memungkinkan aplikasi utama yang terdiri dari beberapa subapplikasi untuk menyediakan tombol taskbar terpisah untuk setiap subapplikasi dan jendela terkait. VersionInformation memungkinkan dua versi aplikasi untuk hidup berdampingan saat dipandang sebagai entitas diskrit. Jika aplikasi tidak dimaksudkan untuk digunakan dengan cara itu, VersionInformation harus dihilangkan sehingga versi yang ditingkatkan dapat menggunakan AppUserModelID yang sama dengan versi yang diganti.

Tempat Menetapkan AppUserModelID

Saat aplikasi menggunakan satu atau beberapa AppUserModelIDs eksplisit, aplikasi harus menerapkan AppUserModelID tersebut di lokasi dan situasi berikut:

  • Di properti System.AppUserModel.ID file pintasan aplikasi. Pintasan (sebagai IShellLink, CLSID_ShellLink, atau file .lnk) mendukung properti melalui IPropertyStore dan mekanisme pengaturan properti lainnya yang digunakan di seluruh Shell. Ini memungkinkan taskbar untuk mengidentifikasi pintasan yang tepat untuk disematkan dan memastikan bahwa jendela milik proses dikaitkan dengan tombol taskbar tersebut dengan tepat.

    Catatan

    Properti System.AppUserModel.ID harus diterapkan ke pintasan saat pintasan tersebut dibuat. Saat menggunakan Microsoft Windows Installer (MSI) untuk menginstal aplikasi, tabel MsiShortcutProperty memungkinkan AppUserModelID diterapkan ke pintasan saat dibuat selama penginstalan.

     

  • Sebagai properti dari salah satu jendela aplikasi yang sedang berjalan. Ini dapat diatur dengan salah satu dari dua cara:

    1. Jika jendela yang berbeda yang dimiliki oleh satu proses memerlukan AppUserModelID yang berbeda untuk mengontrol pengelompokan taskbar, gunakan SHGetPropertyStoreForWindow) untuk mengambil penyimpanan properti jendela dan mengatur AppUserModelID sebagai properti jendela.
    2. Jika semua jendela dalam proses menggunakan AppUserModelID yang sama, atur AppUserModelID pada proses melalui SetCurrentProcessExplicitAppUserModelID. Aplikasi harus memanggil SetCurrentProcessExplicitAppUserModelID untuk mengatur AppUserModelID selama rutinitas startup awal aplikasi sebelum aplikasi menyajikan UI apa pun, membuat manipulasi Jump List-nya, atau membuat (atau menyebabkan sistem melakukan) panggilan apa pun ke SHAddToRecentDocs.

    AppUserModelID tingkat jendela mengambil alih AppUserModelID tingkat proses.

    Ketika aplikasi menetapkan AppUserModelID eksplisit di tingkat jendela, aplikasi dapat memberikan perintah peluncuran ulang spesifik untuk tombol taskbar-nya. Untuk menyediakan informasi tersebut, properti berikut digunakan:

    Catatan

    Jika ada pintasan untuk meluncurkan aplikasi, aplikasi harus menerapkan AppUserModelID sebagai properti pintasan alih-alih menggunakan properti peluncuran ulang. Dalam hal ini, baris perintah, ikon, dan teks pintasan digunakan untuk menyediakan informasi yang sama dengan properti pelunasan.

     

    AppUserModelID eksplisit tingkat jendela juga dapat menggunakan properti System.AppUserModel.PreventPinning untuk menentukan bahwa properti tersebut seharusnya tidak tersedia untuk disematkan atau diluncurkan kembali.

  • Dalam panggilan untuk menyesuaikan atau memperbarui (ICustomDestinationList), ambil (IApplicationDocumentLists), atau hapus (IApplicationDestinations) Jump List aplikasi.

  • Dalam pendaftaran asosiasi file (melalui ProgID-nya) jika aplikasi menggunakan daftar tujuan Terbaru atau Sering yang dihasilkan secara otomatis oleh sistem. Informasi asosiasi ini direferensikan oleh SHAddToRecentDocs. Informasi ini juga digunakan saat menambahkan tujuan IShellItem ke Jump List kustom melalui ICustomDestinationList::AppendCategory.

  • Dalam panggilan apa pun, aplikasi melakukan langsung ke SHAddToRecentDocs. Jika aplikasi bergantung pada dialog file umum untuk melakukan panggilan ke SHAddToRecentDocs atas namanya, panggilan tersebut dapat menyimpulkan AppUserModelID eksplisit hanya jika AppUserModelID diatur untuk seluruh proses. Jika aplikasi menetapkan AppUserModelIDs di jendelanya alih-alih pada proses, aplikasi harus melakukan semua panggilan ke SHAddToRecentDocs itu sendiri, dengan AppUserModelID eksplisitnya, serta mencegah dialog file umum melakukan panggilannya sendiri. Ini harus dilakukan setiap kali item dibuka, untuk memastikan bagian Terbaru atau Sering dari Jump List aplikasi akurat.

Item berikut menjelaskan skenario umum dan tempat menerapkan AppUserModelID eksplisit dalam skenario tersebut.

  • Saat satu proses berisi beberapa aplikasi, gunakan SHGetPropertyStoreForWindow untuk mengambil penyimpanan properti jendela dan mengatur AppUserModelID sebagai properti jendela.
  • Saat aplikasi menggunakan beberapa proses, terapkan AppUserModelID ke setiap proses. Apakah Anda menggunakan AppUserModelID yang sama pada setiap proses bergantung pada apakah Anda ingin setiap proses muncul sebagai bagian dari aplikasi utama atau sebagai entitas individual.
  • Untuk memisahkan jendela tertentu dari set dalam proses yang sama, gunakan penyimpanan properti jendela untuk menerapkan satu AppUserModelID ke jendela yang ingin Anda pisahkan, lalu terapkan AppUserModelID yang berbeda ke proses. Jendela apa pun dalam proses tersebut yang tidak diberi label secara eksplisit dengan AppUserModelID tingkat jendela mewarisi AppUserModelID dari proses tersebut.
  • Jika jenis file dikaitkan dengan aplikasi, tetapkan AppUserModelID dalam pendaftaran ProgID jenis file. Jika satu file yang dapat dieksekusi diluncurkan dalam mode berbeda yang muncul kepada pengguna sebagai aplikasi yang berbeda, AppUserModelID terpisah diperlukan untuk setiap mode. Dalam hal ini, harus ada beberapa pendaftaran ProgID untuk jenis file, masing-masing dengan AppUserModelID yang berbeda.
  • Ketika ada beberapa lokasi pintasan tempat pengguna dapat meluncurkan aplikasi (di menu Mulai , di desktop, atau di tempat lain) ambil penyimpanan properti pintasan untuk menerapkan satu AppUserModelID ke semua pintasan sebagai properti pintasan.
  • Saat panggilan eksplisit dilakukan ke SHAddToRecentDocs oleh aplikasi, gunakan AppUserModelID dalam panggilan. Ketika dialog file umum digunakan untuk membuka atau menyimpan file, SHAddToRecentDocs dipanggil oleh dialog atas nama aplikasi. Panggilan tersebut dapat menyimpulkan AppUserModelID eksplisit dari proses. Namun, jika AppUserModelID eksplisit diterapkan sebagai properti jendela, dialog file umum tidak dapat menentukan AppUserModelID yang benar. Dalam hal ini, aplikasi itu sendiri harus secara eksplisit memanggil SHAddToRecentDocs dan menyediakannya dengan AppUserModelID yang benar. Selain itu, aplikasi harus mencegah dialog file umum memanggil SHAddToRecentDocs atas namanya dengan mengatur bendera FOS_DONTADDTORECENT dalam metode GetOptionsIFileOpenDialog atau IFileSaveDialog.

Mendaftarkan Aplikasi sebagai Proses Host

Aplikasi dapat mengatur entri registri IsHostApp untuk menyebabkan proses yang dapat dieksekusi dianggap sebagai proses host oleh taskbar. Ini mempengaruhi pengelompokannya dan entri Jump List default.

Contoh berikut menunjukkan entri registri yang diperlukan. Perhatikan bahwa entri tidak diberi nilai; kehadirannya adalah semua yang diperlukan. Ini adalah nilai REG_NULL.

HKEY_CLASSES_ROOT
   Applications
      example.exe
         IsHostApp

Jika proses itu sendiri atau file pintasan yang digunakan untuk meluncurkan proses memiliki AppUserModelID eksplisit, maka daftar proses host diabaikan dan aplikasi diperlakukan sebagai aplikasi normal oleh taskbar. Jendela yang sedang berjalan aplikasi dikelompokkan bersama di bawah satu tombol taskbar dan aplikasi dapat disematkan ke taskbar.

Jika hanya nama yang dapat dieksekusi proses yang berjalan yang diketahui, tanpa AppUserModelID eksplisit, dan yang dapat dieksekusi berada dalam daftar proses host, maka setiap instans proses diperlakukan sebagai entitas terpisah untuk pengelompokan taskbar. Tombol taskbar yang terkait dengan instans proses tertentu tidak menampilkan opsi pin/unpin atau ikon peluncuran untuk instans proses baru. Proses ini juga tidak memenuhi syarat untuk dimasukkan dalam daftar Paling Sering Digunakan (MFU) menu Mulai . Namun, jika proses diluncurkan melalui pintasan yang berisi argumen peluncuran (biasanya konten target untuk dihosting sebagai "aplikasi"), sistem dapat menentukan identitas dan aplikasi dapat disematkan dan diluncurkan kembali.

Daftar Pengecualian untuk Penyematan Taskbar dan Daftar Terbaru/Sering

Aplikasi, proses, dan jendela dapat memilih untuk membuat diri mereka tidak tersedia untuk menyematkan ke taskbar atau untuk dimasukkan dalam daftar MFU menu Mulai . Ada tiga mekanisme untuk mencapai hal ini:

  1. Tambahkan entri NoStartPage ke pendaftaran aplikasi seperti yang ditunjukkan di sini:

    HKEY_CLASSES_ROOT
       Applications
          Example.exe
             NoStartPage
    

    Data yang terkait dengan entri NoStartPage diabaikan. Hanya kehadiran entri yang diperlukan. Oleh karena itu, jenis ideal untuk NoStartPage adalah REG_NONE.

    Perhatikan bahwa setiap penggunaan AppUserModelID eksplisit mengambil alih entri NoStartPage. Jika AppUserModelID eksplisit diterapkan ke pintasan, proses, atau jendela, appUserModelID menjadi dapat disematkan dan memenuhi syarat untuk daftar MFU menu Mulai .

  2. Atur properti System.AppUserModel.PreventPinning pada jendela dan pintasan. Properti ini harus diatur pada jendela sebelum properti PKEY_AppUserModel_ID .

  3. Tambahkan AppUserModelID eksplisit sebagai nilai di bawah subkunci registri berikut seperti yang ditunjukkan di sini:

    HKEY_LOCAL_MACHINE
       Software
          Microsoft
             Windows
                CurrentVersion
                   Explorer
                      FileAssociation
                         NoStartPageAppUserModelIDs
                            AppUserModelID1
                            AppUserModelID2
                            AppUserModelID3
    

    Setiap entri adalah nilai REG_NULL dengan nama AppUserModelID. AppUserModelID apa pun yang ditemukan dalam daftar ini tidak dapat disematkan dan tidak memenuhi syarat untuk dimasukkan dalam daftar MFU menu Mulai .

Ketahuilah bahwa file tertentu yang dapat dieksekusi serta pintasan yang berisi string tertentu dalam namanya secara otomatis dikecualikan dari penyematan dan penyertaan dalam daftar MFU.

Catatan

Pengecualian otomatis ini dapat ditimpa dengan menerapkan AppUserModelID eksplisit.

 

Jika salah satu string berikut, terlepas dari kasus, disertakan dalam nama pintasan, program tidak dapat disematkan dan tidak ditampilkan dalam daftar yang paling sering digunakan (tidak berlaku untuk Windows 10):

  • Dokumentasi
  • Bantuan
  • Instal
  • Info Selengkapnya
  • Baca saya
  • Baca Terlebih Dahulu
  • Baca Saya
  • Hapus
  • Siapkan
  • Dukungan
  • Apa yang baru

Daftar program berikut ini tidak dapat disematkan dan dikecualikan dari daftar yang paling sering digunakan.

  • 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

Daftar sebelumnya disimpan dalam nilai registri berikut.

Catatan

Daftar ini tidak boleh dimodifikasi oleh aplikasi. Gunakan salah satu metode daftar pengecualian yang tercantum sebelumnya untuk pengalaman yang sama.

 

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FileAssociation
                     AddRemoveApps
                     HostApps

SetCurrentProcessExplicitAppUserModelID

GetCurrentProcessExplicitAppUserModelID

Ekstensi Taskbar

ICustomDestinationList::SetAppID

IApplicationDocumentLists::SetAppID

IApplicationDestinations::SetAppID

SHGetPropertyStoreForWindow