ID uživatelských modelů aplikací (AppUserModelIDs)
ID modelu uživatele aplikace (AppUserModelIDs) se často používají na hlavním panelu ve Windows 7 a novějších systémech k přidružení procesů, souborů a oken k určité aplikaci. V některých případech stačí spoléhat na interní AppUserModelID přiřazené procesu systémem. Aplikace, která vlastní více procesů nebo aplikace spuštěné v hostitelském procesu, se však může muset explicitně identifikovat, aby mohla seskupit jinak různorodá okna pod jedním tlačítkem hlavního panelu a řídit obsah seznamu přeskakování dané aplikace.
- Application-Defined a System-Defined AppUserModelIDs
- Vytvoření Application-Defined AppUserModelID
- , kde přiřadit AppUserModelID
- registraci aplikace jako hostitelského procesu
- seznamy vyloučení pro připnutí hlavního panelu a nedávné nebo časté seznamy
- související témata
Application-Defined a System-Defined AppUserModelIDs
Některé aplikace nehlásí explicitní AppUserModelID. Jsou volitelné. V takovém případě systém používá řadu heuristik k přiřazení interní appUserModelID. Vyhnete se však těmto výpočtům výhodu výkonu a explicitní AppUserModelID je jediný způsob, jak zaručit přesné uživatelské prostředí. Proto důrazně doporučujeme nastavit explicitní ID. Aplikace nemůžou načíst identifikátor AppUserModelID přiřazený systémem.
Pokud aplikace používá explicitní AppUserModelID, musí také přiřadit stejné AppUserModelID všem spuštěným okenám nebo procesům, zástupcům a přidružením souborů. Musí také použít AppUserModelID při přizpůsobení seznamu jump přes ICustomDestinationLista ve všech voláních SHAddToRecentDocs.
Poznámka
Pokud aplikace nemají explicitní AppUserModelID, musí volat IApplicationDestinations, IApplicationDocumentListsa ICustomDestinationList metody, stejně jako SHAddToRecentDocs z aplikace. Pokud se tyto metody volají z jiného procesu, například z instalačního programu nebo odinstalátoru, systém nemůže vygenerovat správné AppUserModelID a tato volání nebudou mít žádný vliv.
Následující položky popisují běžné scénáře, které vyžadují explicitní AppUserModelID. Také ukazují případy, kdy se má použít více explicitních identifikátorů AppUserModelID.
Jeden spustitelný soubor s uživatelským rozhraním s více režimy, které se uživateli zobrazují jako samostatné aplikace, by měly každému režimu přiřadit různé identifikátory AppUserModelIDs. Například část aplikace, kterou uživatelé vidí jako nezávislé prostředí, ke kterému můžou připnout a spustit z hlavního panelu odděleně od zbytku aplikace, by měla mít vlastní AppUserModelID odděleně od hlavního prostředí.
Několik zástupců s různými argumenty, které vedou k tomu, co uživatel vidí jako stejnou aplikaci, by měl pro všechny zástupce použít jeden AppUserModelID. Například Windows Internet Explorer má různé klávesové zkratky pro různé režimy (například spuštění bez doplňků), ale měly by se zobrazit uživateli jako jedna instance Aplikace Internet Explorer.
Spustitelný soubor, který funguje jako hostitelský proces a spouští cílový obsah jako aplikace, musí zaregistrovat jako hostitelskou aplikaci, po které může přiřadit různé AppUserModelIDs každému vnímanému prostředí, které hostuje. Případně může hostitelský proces povolit hostovaný program nastavit jeho AppUserModelIDs. V obou případech musí hostitelský proces uchovávat záznam o zdroji AppUserModelIDs, ať už samotné, nebo hostované aplikace. V tomto případě neexistuje žádné primární uživatelské prostředí hostitelského procesu bez cílového obsahu. Příklady jsou aplikace Windows Remote Applications Integrated Místně (RAIL), Java Runtime, RunDLL32.exenebo DLLHost.exe.
V případě existujících hostovaných aplikací se systém pokusí identifikovat jednotlivá prostředí, ale nové aplikace by měly k zajištění zamýšleného uživatelského prostředí používat explicitní identifikátory AppUserModelID.
Spolupracující nebo zřetězený procesy, které jsou pro uživatele součástí stejné aplikace, by měly mít stejné AppUserModelID použité u každého procesu. Mezi příklady patří hry s procesem spouštěče (zřetězený) a Microsoft Windows Media Player, který má prostředí pro první spuštění/nastavení spuštěné v jednom procesu a hlavní aplikaci běžící v jiném procesu (spolupráce).
Rozšíření oboru názvů shellu, které funguje jako samostatná aplikace pro více než procházení a správu obsahu v Průzkumníku Windows, by mělo přiřadit AppUserModelID ve vlastnostech složky. Příkladem je Ovládací panely.
V prostředí virtualizace, jako je architektura nasazení, by prostředí virtualizace mělo přiřadit různé identifikátory AppUserModelIDs každé aplikaci, kterou spravuje. V těchto případech spouštěč aplikací používá k nastavení prostředí zprostředkující proces a pak operaci předá jinému procesu, aby aplikaci spustil. Mějte na paměti, že systém nemůže spojit spuštěný cílový proces zpět se zástupcem, protože zástupce odkazuje na zprostředkující proces.
Pokud má nějaká aplikace více oken, zástupců nebo procesů, měla by se na každou z těchto částí v prostředí virtualizace použít také id AppUserModelID dané aplikace.
Příkladem této situace je architektura ClickOnce, která správně přiřadí AppUserModelIDs jménem aplikací, které spravuje. Stejně jako ve všech takových prostředích by aplikace nasazené a spravované technologií ClickOnce neměly přiřazovat explicitní identifikátory AppUserModelIDs, protože to bude v konfliktu s AppUserModelIDs přiřazenými Technologií ClickOnce a vést k neočekávaným výsledkům.
Vytvoření Application-Defined AppUserModelID
Aplikace musí zadat své AppUserModelID v následujícím formuláři. Nesmí obsahovat více než 128 znaků a nesmí obsahovat mezery. Každý oddíl by měl obsahovat písmena pascal.
CompanyName.ProductName.SubProduct.VersionInformation
CompanyName
a ProductName
by se měly vždy používat, zatímco části SubProduct
a VersionInformation
jsou volitelné a závisí na požadavcích aplikace.
SubProduct
umožňuje hlavní aplikaci, která se skládá z několika dílčích aplikací, poskytnout samostatné tlačítko hlavního panelu pro každou dílčí aplikaci a její přidružená okna.
VersionInformation
umožňuje, aby dvě verze aplikace spoluexistily a byly považovány za diskrétní entity. Pokud aplikace není určena k použití tímto způsobem, měla by být VersionInformation
vynechána, aby upgradovaná verze mohl použít stejné AppUserModelID jako verze, kterou nahradil.
Kde přiřadit AppUserModelID
Pokud aplikace používá jedno nebo více explicitních identifikátorů AppUserModelIDs, měla by tyto identifikátory AppUserModelIDs použít v následujících umístěních a situacích:
Ve vlastnosti System.AppUserModel.ID souboru zástupce aplikace. Zástupce (jako IShellLink, CLSID_ShellLink nebo soubor .lnk) podporuje vlastnosti prostřednictvím IPropertyStore a dalších mechanismů nastavení vlastností používaných v celém prostředí. To umožňuje, aby hlavní panel identifikoval správnou klávesovou zkratku pro připnutí a zajistil, že okna, která patří do procesu, jsou příslušně přidružena k tomuto tlačítku hlavního panelu.
Poznámka
Vlastnost System.AppUserModel.ID by se měla při vytváření zástupce použít na zástupce. Při použití Instalační služby systému Microsoft Windows (MSI) k instalaci aplikace, MsiShortcutProperty tabulka umožňuje, aby appUserModelID byl použit na zástupce při jeho vytvoření během instalace.
Jako vlastnost libovolné aplikace se spuštěnými okny. Můžete ho nastavit jedním ze dvou způsobů:
- Pokud různá okna vlastněná jedním procesem vyžadují různé AppUserModelIDs pro řízení seskupování hlavního panelu, použijte SHGetPropertyStoreForWindow) k načtení úložiště vlastností okna a nastavení AppUserModelID jako vlastnosti okna.
- Pokud všechna okna v procesu používají stejné AppUserModelID, nastavte AppUserModelID procesu, i když SetCurrentProcessExplicitAppUserModelID. Aplikace musí volat SetCurrentProcessExplicitAppUserModelID nastavit appUserModelID během počáteční spouštěcí rutiny aplikace předtím, než aplikace zobrazí jakékoli uživatelské rozhraní, provede jakoukoli manipulaci se seznamy jumpů nebo provede (nebo způsobí, že systém provede) jakékoli volání SHAddToRecentDocs.
AppUserModelID na úrovni okna přepíše ID AppUserModelID na úrovni procesu.
Když aplikace nastaví explicitní AppUserModelID na úrovni okna, může aplikace poskytnout specifika příkazu relaunch pro tlačítko hlavního panelu. K zadání těchto informací se použijí následující vlastnosti:
- System.AppUserModel.RelaunchCommand
- System.AppUserModel.RelaunchDisplayNameResource
- System.AppUserModel.RelaunchIconResource
Poznámka
Pokud zástupce existuje ke spuštění aplikace, měla by aplikace použít AppUserModelID jako vlastnost zástupce místo použití vlastností opětovného spuštění. V takovém případě se příkazový řádek, ikona a text zástupce používají k zadání stejných informací jako vlastnosti opětovného spuštění.
Explicitní AppUserModelID na úrovni okna může také použít vlastnost System.AppUserModel.PreventPinning určit, že by neměla být k dispozici pro připnutí nebo opětovné spuštění.
Při volání přizpůsobení nebo aktualizace (ICustomDestinationList), načtení (IApplicationDocumentLists) nebo vymazání (IApplicationDestinations) seznamu odkazů aplikace.
V registraci přidružení souborů (prostřednictvím ProgID) pokud aplikace používá automaticky vygenerovaný systém posledních nebo častých cílových seznamech. Na tyto informace o přidružení odkazuje SHAddToRecentDocs. Tyto informace se také používají při přidávání IShellItem cílů do vlastních seznamů odkazů prostřednictvím ICustomDestinationList::AppendCategory.
V každém volání aplikace provádí přímo na SHAddToRecentDocs. Pokud aplikace závisí na společném dialogovém okně souboru pro volání SHAddToRecentDocs jejím jménem, mohou tato volání zrušit explicitní AppUserModelID pouze v případě, že appUserModelID je nastaven pro celý proces. Pokud aplikace nastaví AppUserModelIDs v jeho oknech místo procesu, musí aplikace provádět všechna volání SHAddToRecentDocs sám, s explicitním AppUserModelID, stejně jako zabránit společné dialogové okno souboru v provádění vlastních volání. To musí být provedeno při každém otevření položky, aby byla Poslední nebo části Časté seznamu odkazů aplikace přesné.
Následující položky popisují běžné scénáře a kde v těchto scénářích použít explicitní identifikátory AppUserModelID.
- Pokud jeden proces obsahuje více aplikací, použijte SHGetPropertyStoreForWindow načíst úložiště vlastností okna a nastavit AppUserModelID jako vlastnost okna.
- Pokud aplikace používá více procesů, použijte AppUserModelID pro každý proces. To, jestli pro každý proces použijete stejné AppUserModelID, závisí na tom, jestli se má každý proces zobrazit jako součást hlavní aplikace nebo jako jednotlivé entity.
- Chcete-li oddělit určitá okna od sady ve stejném procesu, použijte úložiště vlastností okna k použití jednoho AppUserModelID u těchto oken, která chcete oddělit, a pak použijte pro tento proces jiný AppUserModelID. Jakékoli okno v daném procesu, které nebylo explicitně označeno appUserModelID na úrovni okna, dědí AppUserModelID procesu.
- Pokud je typ souboru přidružený k aplikaci, přiřaďte AppUserModelID v ProgID typu souboru registraci. Pokud se jeden spustitelný soubor spustí v různých režimech, které se uživateli zobrazují jako samostatné aplikace, je pro každý režim vyžadován samostatný AppUserModelID. V takovém případě musí existovat více registrací ProgID pro typ souboru, z nichž každý má jiný AppUserModelID.
- Pokud existuje více umístění zástupců, ze kterých může uživatel spustit aplikaci (v nabídce Start, na ploše nebo jinde) načíst úložiště vlastností zástupce, aby se pro všechny klávesové zkratky jako vlastnosti zástupce použil jeden AppUserModelID.
- Pokud je explicitní volání SHAddToRecentDocs aplikací, použijte AppUserModelID ve volání. Když se k otevření nebo ukládání souborů používá společné dialogové okno souboru, SHAddToRecentDocs volá dialogové okno jménem aplikace. Toto volání může odvodit explicitní AppUserModelID z procesu. Pokud je však explicitní AppUserModelID použit jako vlastnost okna, běžné dialogové okno souboru nemůže určit správný AppUserModelID. V takovém případě musí samotná aplikace explicitně volat SHAddToRecentDocs a poskytnout jí správné AppUserModelID. Kromě toho musí aplikace zabránit volání SHAddToRecentDocs jménem aplikace nastavením příznaku FOS_DONTADDTORECENT v GetOptions metoda IFileOpenDialog nebo IFileSaveDialog.
Registrace aplikace jako hostitelského procesu
Aplikace může nastavit položku registru IsHostApp tak, aby byl proces spustitelného souboru považován za hostitelský proces na hlavním panelu. To má vliv na seskupení a výchozí položky seznamu odkazů.
Následující příklad ukazuje požadovanou položku registru. Všimněte si, že položka není přiřazena hodnota; jeho přítomnost je vše, co je vyžadováno. Jedná se o REG_NULL hodnotu.
HKEY_CLASSES_ROOT
Applications
example.exe
IsHostApp
Pokud proces samotný nebo soubor zástupce použitý ke spuštění procesu má explicitní AppUserModelID, seznam hostitelských procesů se ignoruje a aplikace se považuje za normální aplikaci na hlavním panelu. Spuštěná okna aplikace jsou seskupené pod jedním tlačítkem hlavního panelu a aplikace se dá připnout na hlavní panel.
Pokud je známý pouze název spustitelného souboru spuštěného procesu bez explicitního id AppUserModelID a tento spustitelný soubor je v seznamu hostitelských procesů, bude každá instance procesu považována za samostatnou entitu pro seskupení hlavního panelu. Tlačítko hlavního panelu přidružené k jakékoli konkrétní instanci procesu nezobrazuje možnost připnutí nebo odepnutí nebo ikonu spuštění pro novou instanci procesu. Tento proces také nemá nárok na zahrnutí do seznamu nejčastěji používaných položek (MFU) nabídky Start. Pokud se ale proces spustil prostřednictvím zástupce, který obsahuje argumenty spuštění (obvykle cílový obsah, který se má hostovat jako "aplikace"), systém může určit identitu a aplikaci lze připnout a znovu spustit.
Seznamy vyloučení pro připnutí hlavního panelu a poslední/časté seznamy
Aplikace, procesy a okna se můžou rozhodnout, že nebudou k dispozici pro připnutí na hlavní panel nebo pro zahrnutí do seznamu MFU nabídky Start. Existují tři mechanismy, jak toho dosáhnout:
Přidejte položku NoStartPage do registrace aplikace, jak je znázorněno zde:
HKEY_CLASSES_ROOT Applications Example.exe NoStartPage
Data přidružená k položce NoStartPage se ignorují. Vyžaduje se pouze přítomnost položky. Proto je ideální typ pro NoStartPage REG_NONE.
Všimněte si, že jakékoli použití explicitní AppUserModelID přepíše položku NoStartPage. Pokud se u zástupce, procesu nebo okna použije explicitní ID AppUserModelID, stane se připnutelným a způsobilým pro seznam MFU nabídky Start.
Nastavte vlastnost System.AppUserModel.PreventPinning v oknech a klávesových zkratkách. Tato vlastnost musí být nastavena v okně před PKEY_AppUserModel_ID vlastnost.
Přidejte explicitní AppUserModelID jako hodnotu pod následující podklíč registru, jak je znázorněno zde:
HKEY_LOCAL_MACHINE Software Microsoft Windows CurrentVersion Explorer FileAssociation NoStartPageAppUserModelIDs AppUserModelID1 AppUserModelID2 AppUserModelID3
Každá položka je REG_NULL hodnota s názvem AppUserModelID. Žádné ID AppUserModelID nalezené v tomto seznamu není možné připnout a nemá nárok na zahrnutí do seznamu MFU nabídky Start.
Mějte na paměti, že některé spustitelné soubory a klávesové zkratky, které obsahují určité řetězce v jejich názvu, jsou automaticky vyloučeny z připnutí a zahrnutí do seznamu MFU.
Poznámka
Toto automatické vyloučení je možné přepsat použitím explicitního id objektu AppUserModelID.
Pokud některý z následujících řetězců bez ohledu na případ obsahuje název zástupce, program není připnutelný a nezobrazuje se v nejčastěji používaném seznamu (nevztahuje se na Windows 10):
- Dokumentace
- Pomoc
- Nainstalovat
- Více
- Přečtěte si mě
- Přečíst jako první
- Readme
- Odstranit
- Sestava
- Podpora
- Co je nového
Následující seznam programů není možné připnout a jsou vyloučeny z nejčastěji používaného seznamu.
- 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
Předchozí seznamy jsou uloženy v následujících hodnotách registru.
Poznámka
Tyto seznamy by neměly být upraveny aplikacemi. Použijte jednu z metod seznamu vyloučení uvedených dříve pro stejné prostředí.
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FileAssociation
AddRemoveApps
HostApps
Související témata