Delen via


Model-id's van toepassingsgebruiker (AppUserModelIDs)

Toepassingsgebruikersmodel-id's (AppUserModelIDs) worden uitgebreid gebruikt door de taakbalk in Windows 7 en hoger om processen, bestanden en vensters te koppelen aan een bepaalde toepassing. In sommige gevallen is het voldoende om te vertrouwen op de interne AppUserModelID die door het systeem is toegewezen aan een proces. Een toepassing die eigenaar is van meerdere processen of een toepassing die wordt uitgevoerd in een hostproces, moet zichzelf mogelijk expliciet identificeren, zodat deze de anders verschillende vensters kan groeperen onder één taakbalkknop en de inhoud van de Jump List van die toepassing kan beheren.

Application-Defined en System-Defined AppUserModelIDs

Sommige toepassingen declareren geen expliciete AppUserModelID. Ze zijn optioneel. In dat geval gebruikt het systeem een reeks heuristieken om een interne AppUserModelID toe te wijzen. Er is echter een prestatievoordeel bij het vermijden van deze berekeningen en een expliciete AppUserModelID is de enige manier om een exacte gebruikerservaring te garanderen. Daarom is het raadzaam om een expliciete id in te stellen. Toepassingen kunnen geen door het systeem toegewezen AppUserModelID ophalen.

Als een toepassing gebruikmaakt van een expliciete AppUserModelID, moet deze ook dezelfde AppUserModelID toewijzen aan alle actieve vensters of processen, snelkoppelingen en bestandskoppelingen. Het moet ook die AppUserModelID gebruiken bij het aanpassen van de Jump List via ICustomDestinationList, en in alle aanroepen naar SHAddToRecentDocs.

Notitie

Als toepassingen geen expliciete AppUserModelID hebben, moeten ze IApplicationDestinationsaanroepen, IApplicationDocumentListsen ICustomDestinationList methoden en SHAddToRecentDocs vanuit de toepassing. Als deze methoden worden aangeroepen vanuit een ander proces, zoals een installatieprogramma of verwijderprogramma, kan het systeem niet de juiste AppUserModelID genereren en hebben deze aanroepen geen effect.

 

In de volgende items worden veelvoorkomende scenario's beschreven waarvoor een expliciete AppUserModelID is vereist. Ze wijzen ook op gevallen waarin meerdere expliciete AppUserModelIDs moeten worden gebruikt.

  • Eén uitvoerbaar bestand met een gebruikersinterface met meerdere modi die aan de gebruiker als afzonderlijke toepassingen worden weergegeven, moeten verschillende AppUserModelID's aan elke modus toewijzen. Een deel van een toepassing die gebruikers zien als een onafhankelijke ervaring die ze kunnen vastmaken aan en starten vanaf de taakbalk, afzonderlijk van de rest van de toepassing, moeten een eigen AppUserModelID hebben, gescheiden van de hoofdervaring.

  • Meerdere sneltoetsen met verschillende argumenten die allemaal leiden tot wat de gebruiker ziet als dezelfde toepassing, moet één AppUserModelID gebruiken voor alle sneltoetsen. Windows Internet Explorer heeft bijvoorbeeld verschillende sneltoetsen voor verschillende modi (zoals starten zonder invoegtoepassingen), maar ze moeten allemaal als één Internet Explorer-exemplaar voor de gebruiker worden weergegeven.

  • Een uitvoerbaar bestand dat fungeert als hostproces en doelinhoud als een toepassing uitvoert, moet zich registreren als een hosttoepassing, waarna er verschillende AppUserModelIDs kunnen worden toegewezen aan elke waargenomen ervaring die wordt gehost. Het hostproces kan het gehoste programma ook toestaan om de AppUserModelIDs in te stellen. In beide gevallen moet het hostproces een record bewaren van de bron van de AppUserModelIDs, hetzij zelf of de gehoste toepassing. In dit geval is er geen primaire gebruikerservaring van het hostproces zonder de doelinhoud. Voorbeelden zijn Windows Remote Applications Integrated Locally (RAIL)-toepassingen, de Java Runtime, RunDLL32.exeof DLLHost.exe.

    In het geval van bestaande gehoste toepassingen probeert het systeem afzonderlijke ervaringen te identificeren, maar nieuwe toepassingen moeten expliciete AppUserModelID's gebruiken om de beoogde gebruikerservaring te garanderen.

  • Coöperatieve of gekoppelde processen die aan de gebruiker deel uitmaken van dezelfde toepassing, moeten voor elk proces dezelfde AppUserModelID hebben toegepast. Voorbeelden hiervan zijn games met een startprogrammaproces (gekoppeld) en Microsoft Windows Media Player, dat een first-run/setup-ervaring heeft die wordt uitgevoerd in het ene proces en de hoofdtoepassing die in een ander proces wordt uitgevoerd (coöperatief).

  • Een Shell-naamruimteextensie die fungeert als een afzonderlijke toepassing voor meer dan bladeren en beheren van inhoud in Windows Verkenner, moet een AppUserModelID toewijzen in de mapeigenschappen. Een voorbeeld is het Configuratiescherm.

  • In een virtualisatieomgeving, zoals een implementatieframework, moet de virtualisatieomgeving verschillende AppUserModelIDs toewijzen aan elke toepassing die wordt beheerd. In deze gevallen gebruikt een startprogramma voor toepassingen een intermediair proces om de omgeving in te stellen en vervolgens de bewerking af te geven aan een ander proces om de toepassing uit te voeren. Dit zorgt ervoor dat het systeem het actieve doelproces niet kan koppelen aan de snelkoppeling omdat de snelkoppeling naar het intermediaire proces verwijst.

    Als een toepassing meerdere vensters, snelkoppelingen of processen heeft, moet de toegewezen AppUserModelID van die toepassing ook worden toegepast op elk van deze onderdelen door de virtualisatieomgeving.

    Een voorbeeld van deze situatie is het ClickOnce-framework, dat AppUserModelIDs correct toewijst namens de toepassingen die worden beheerd. Net als in alle dergelijke omgevingen mogen toepassingen die zijn geïmplementeerd en beheerd door ClickOnce geen expliciete AppUserModelID's zelf toewijzen, omdat dit conflicteert met de AppUserModelIDs die door ClickOnce zijn toegewezen en leiden tot onverwachte resultaten.

Een Application-Defined AppUserModelID maken

Een toepassing moet de AppUserModelID in het volgende formulier opgeven. Het mag niet meer dan 128 tekens bevatten en mag geen spaties bevatten. Elke sectie moet pascal-cased zijn.

CompanyName.ProductName.SubProduct.VersionInformation

CompanyName en ProductName moeten altijd worden gebruikt, terwijl de SubProduct en VersionInformation delen optioneel zijn en afhankelijk zijn van de vereisten van de toepassing. SubProduct staat een hoofdtoepassing toe die bestaat uit verschillende subtoepassingen om een afzonderlijke taakbalkknop te bieden voor elke subtoepassing en de bijbehorende vensters. VersionInformation kunnen twee versies van een toepassing naast elkaar bestaan terwijl ze als afzonderlijke entiteiten worden gezien. Als een toepassing niet op die manier moet worden gebruikt, moet de VersionInformation worden weggelaten, zodat een bijgewerkte versie dezelfde AppUserModelID kan gebruiken als de versie die wordt vervangen.

Waar kan ik een AppUserModelID toewijzen

Wanneer een toepassing een of meer expliciete AppUserModelIDs gebruikt, moet deze AppUserModelIDs worden toegepast op de volgende locaties en situaties:

  • In de eigenschap System.AppUserModel.ID van het snelkoppelingsbestand van de toepassing. Een snelkoppeling (als een IShellLink, CLSID_ShellLink of een .lnk-bestand) ondersteunt eigenschappen via IPropertyStore- en andere mechanismen voor het instellen van eigenschappen die in de Shell worden gebruikt. Hierdoor kan de taakbalk de juiste snelkoppeling identificeren om vast te maken en zorgt u ervoor dat vensters die deel uitmaken van het proces op de juiste manier aan die taakbalkknop zijn gekoppeld.

    Notitie

    De eigenschap System.AppUserModel.ID moet worden toegepast op een snelkoppeling wanneer deze snelkoppeling wordt gemaakt. Wanneer u microsoft Windows Installer (MSI) gebruikt om de toepassing te installeren, kan de MsiShortcutProperty tabel de AppUserModelID toepassen op de snelkoppeling wanneer deze tijdens de installatie wordt gemaakt.

     

  • Als eigenschap van een van de actieve vensters van de toepassing. Dit kan op twee manieren worden ingesteld:

    1. Als verschillende vensters die eigendom zijn van één proces, verschillende AppUserModelIDs nodig hebben om de taakbalkgroepering te beheren, gebruikt u SHGetPropertyStoreForWindow) om het eigenschappenarchief van het venster op te halen en de AppUserModelID in te stellen als een venstereigenschap.
    2. Als alle vensters in het proces dezelfde AppUserModelID gebruiken, stelt u de AppUserModelID in op het proces, maar SetCurrentProcessExplicitAppUserModelID. Een toepassing moet SetCurrentProcessExplicitAppUserModelID aanroepen om de AppUserModelID in te stellen tijdens de initiële opstartroutine van een toepassing voordat de toepassing een gebruikersinterface presenteert, alle bewerkingen van de Jump Lists uitvoert of maakt (of veroorzaakt dat het systeem) een aanroep naar SHAddToRecentDocs.

    Een AppUserModelID op vensterniveau overschrijft een AppUserModelID op procesniveau.

    Wanneer een toepassing een expliciete AppUserModelID instelt op vensterniveau, kan de toepassing de specifieke kenmerken van de opdracht opnieuw starten voor de taakbalkknop opgeven. Om die informatie op te geven, worden de volgende eigenschappen gebruikt:

    Notitie

    Als er een snelkoppeling bestaat om de toepassing te starten, moet een toepassing de AppUserModelID toepassen als een eigenschap van de snelkoppeling in plaats van de eigenschappen opnieuw te gebruiken. In dat geval worden de opdrachtregel, het pictogram en de tekst van de snelkoppeling gebruikt om dezelfde informatie op te geven als de eigenschappen voor opnieuw starten.

     

    Een expliciete AppUserModelID op vensterniveau kan ook de eigenschap System.AppUserModel.PreventPinning gebruiken om op te geven dat deze niet beschikbaar moet zijn voor het vastmaken of opnieuw starten.

  • In een aanroep voor het aanpassen of bijwerken (ICustomDestinationList), ophalen (IApplicationDocumentLists) of clear (IApplicationDestinations) de Jump List van de toepassing.

  • Registratie van bestandskoppelingen (via de ProgID) als de toepassing gebruikmaakt van de automatisch gegenereerde Recente of Frequente doellijsten van het systeem. Naar deze koppelingsinformatie wordt verwezen door SHAddToRecentDocs. Deze informatie wordt ook gebruikt bij het toevoegen van IShellItem bestemmingen aan aangepaste Jump Lists via ICustomDestinationList::AppendCategory.

  • In elke aanroep die de toepassing rechtstreeks naar SHAddToRecentDocsdoet. Als de toepassing afhankelijk is van het algemene dialoogvenster voor het maken van aanroepen naar SHAddToRecentDocs- namens de toepassing, kunnen deze aanroepen de expliciete AppUserModelID alleen afleiden als de AppUserModelID is ingesteld voor het hele proces. Als de toepassing AppUserModelIDs instelt in plaats van op het proces, moet de toepassing alle aanroepen uitvoeren naar SHAddToRecentDocs zelf, met de expliciete AppUserModelID, en moet voorkomen dat het algemene bestandsdialoogvenster zijn eigen aanroepen uitvoert. Dit moet gebeuren wanneer een item wordt geopend, om ervoor te zorgen dat de Recente of Frequente secties van de Jump List van de toepassing nauwkeurig zijn.

In de volgende items worden veelvoorkomende scenario's beschreven en waar u expliciete AppUserModelID's kunt toepassen in deze scenario's.

  • Wanneer één proces meerdere toepassingen bevat, gebruikt u SHGetPropertyStoreForWindow om het eigenschappenarchief van het venster op te halen en de AppUserModelID in te stellen als een venstereigenschap.
  • Wanneer een toepassing meerdere processen gebruikt, past u de AppUserModelID toe op elk proces. Of u voor elk proces dezelfde AppUserModelID gebruikt, is afhankelijk van of elk proces moet worden weergegeven als onderdeel van de hoofdtoepassing of als afzonderlijke entiteiten.
  • Als u bepaalde vensters wilt scheiden van een set in hetzelfde proces, gebruikt u het eigenschappenarchief van het venster om één AppUserModelID toe te passen op de vensters die u wilt scheiden en past u vervolgens een andere AppUserModelID toe op het proces. Elk venster in dat proces dat niet expliciet is gelabeld met de AppUserModelID op vensterniveau, neemt de AppUserModelID van het proces over.
  • Als een bestandstype is gekoppeld aan een toepassing, wijst u de AppUserModelID toe in de ProgID registratie van het bestandstype. Als één uitvoerbaar bestand wordt gestart in verschillende modi die voor de gebruiker als afzonderlijke toepassingen worden weergegeven, is een afzonderlijke AppUserModelID vereist voor elke modus. In dat geval moeten er meerdere ProgID-registraties zijn voor het bestandstype, elk met een andere AppUserModelID.
  • Wanneer er meerdere snelkoppelingslocaties zijn waaruit een gebruiker een toepassing kan starten (in het menu Start, op het bureaublad of elders), haalt u het eigenschappenarchief van de snelkoppeling op om één AppUserModelID toe te passen op alle sneltoetsen als snelkoppelingseigenschappen.
  • Wanneer een expliciete aanroep wordt gedaan naar SHAddToRecentDocs door een toepassing, gebruikt u de AppUserModelID in de aanroep. Wanneer het algemene bestandsdialoogvenster wordt gebruikt om bestanden te openen of op te slaan, wordt SHAddToRecentDocs- door het dialoogvenster namens de toepassing aangeroepen. Deze aanroep kan de expliciete AppUserModelID afleiden uit het proces. Als een expliciete AppUserModelID echter wordt toegepast als een venstereigenschap, kan het algemene bestandsdialoogvenster niet de juiste AppUserModelID bepalen. In dat geval moet de toepassing zelf expliciet SHAddToRecentDocs- aanroepen en deze voorzien van de juiste AppUserModelID. Bovendien moet de toepassing voorkomen dat het algemene bestandsdialoogvenster SHAddToRecentDocs- namens de toepassing aanroept door de vlag FOS_DONTADDTORECENT in te stellen in de methode GetOptions van IFileOpenDialog of IFileSaveDialog.

Een toepassing registreren als een hostproces

Een toepassing kan de registervermelding IsHostApp instellen om ervoor te zorgen dat het uitvoerbare proces door de taakbalk als een hostproces wordt beschouwd. Dit is van invloed op de groepering en standaard Jump List-vermeldingen.

In het volgende voorbeeld ziet u de vereiste registervermelding. Houd er rekening mee dat aan de vermelding geen waarde is toegewezen; zijn aanwezigheid is alles wat vereist is. Het is een REG_NULL waarde.

HKEY_CLASSES_ROOT
   Applications
      example.exe
         IsHostApp

Als het proces zelf of het snelkoppelingsbestand dat wordt gebruikt om het proces te starten, een expliciete AppUserModelID heeft, wordt de lijst met hostprocessen genegeerd en wordt de toepassing behandeld als een normale toepassing op de taakbalk. De actieve vensters van de toepassing worden gegroepeerd onder één taakbalkknop en de toepassing kan worden vastgemaakt aan de taakbalk.

Als alleen de uitvoerbare naam van het actieve proces bekend is, zonder een expliciete AppUserModelID en dat uitvoerbare bestand zich in de lijst met hostprocessen bevindt, wordt elk exemplaar van het proces behandeld als een afzonderlijke entiteit voor het groeperen van de taakbalk. Op de taakbalkknop die is gekoppeld aan een specifiek exemplaar van het proces, wordt geen optie voor vastmaken/losmaken of een startpictogram voor een nieuw exemplaar van het proces weergegeven. Het proces komt ook niet in aanmerking voor opname in de lijst Start menu Meest gebruikte (MFU). Als het proces echter is gestart via een snelkoppeling die startargumenten bevat (meestal de doelinhoud die moet worden gehost als de 'toepassing'), kan het systeem de identiteit bepalen en de toepassing kan worden vastgemaakt en opnieuw gestart.

Uitsluitingslijsten voor het vastmaken van de taakbalk en recente/frequente lijsten

Toepassingen, processen en vensters kunnen ervoor kiezen om zichzelf niet beschikbaar te maken voor het vastmaken aan de taakbalk of voor opname in de MFU-lijst van Start menu. Er zijn drie mechanismen om dit te bereiken:

  1. Voeg de NoStartPage-vermelding toe aan de registratie van de toepassing, zoals hier wordt weergegeven:

    HKEY_CLASSES_ROOT
       Applications
          Example.exe
             NoStartPage
    

    De gegevens die aan de NoStartPage-vermelding zijn gekoppeld, worden genegeerd. Alleen de aanwezigheid van de vermelding is vereist. Daarom is het ideale type voor NoStartPage REG_NONE.

    Houd er rekening mee dat elk gebruik van een expliciete AppUserModelID de NoStartPage-vermelding overschrijft. Als een expliciete AppUserModelID wordt toegepast op een snelkoppeling, proces of venster, kan deze worden vastgemaakt en in aanmerking komen voor de lijst Start menu MFU.

  2. Stel de eigenschap System.AppUserModel.PreventPinning in op vensters en snelkoppelingen. Deze eigenschap moet worden ingesteld voor een venster vóór de eigenschap PKEY_AppUserModel_ID.

  3. Voeg een expliciete AppUserModelID toe als een waarde onder de volgende registersubsleutel, zoals hier wordt weergegeven:

    HKEY_LOCAL_MACHINE
       Software
          Microsoft
             Windows
                CurrentVersion
                   Explorer
                      FileAssociation
                         NoStartPageAppUserModelIDs
                            AppUserModelID1
                            AppUserModelID2
                            AppUserModelID3
    

    Elke vermelding is een REG_NULL waarde met de naam van de AppUserModelID. Elke AppUserModelID in deze lijst kan niet worden vastgemaakt en komt niet in aanmerking voor opname in de MFU-lijst Start menu.

Houd er rekening mee dat bepaalde uitvoerbare bestanden en snelkoppelingen die bepaalde tekenreeksen in hun naam bevatten, automatisch worden uitgesloten van het vastmaken en opnemen in de MFU-lijst.

Notitie

Deze automatische uitsluiting kan worden overschreven door een expliciete AppUserModelID toe te passen.

 

Als een van de volgende tekenreeksen, ongeacht het geval, is opgenomen in de naam van de snelkoppeling, kan het programma niet worden vastgemaakt en wordt het niet weergegeven in de meestgebruikte lijst (niet van toepassing op Windows 10):

  • Documentatie
  • Help
  • Installeren
  • Meer informatie
  • Lees me
  • Eerste lezen
  • Leesmij
  • Verwijderen
  • Setup
  • Steunen
  • Wat is er nieuw

De volgende lijst met programma's kan niet worden vastgemaakt en worden uitgesloten van de meest gebruikte lijst.

  • 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

De voorgaande lijsten worden opgeslagen in de volgende registerwaarden.

Notitie

Deze lijsten mogen niet worden gewijzigd door toepassingen. Gebruik een van de methoden voor uitsluitingslijsten die eerder zijn vermeld voor dezelfde ervaring.

 

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FileAssociation
                     AddRemoveApps
                     HostApps

SetCurrentProcessExplicitAppUserModelID

GetCurrentProcessExplicitAppUserModelID

taakbalkextensies

ICustomDestinationList::SetAppID

IApplicationDocumentLists::SetAppID

IApplicationDestinations::SetAppID

SHGetPropertyStoreForWindow-