Programanvändarmodell-ID :er (AppUserModelIDs)
Programanvändarmodell-ID:er (AppUserModelIDs) används i stor utsträckning av aktivitetsfältet i Windows 7 och senare system för att associera processer, filer och fönster med ett visst program. I vissa fall räcker det att förlita sig på den interna AppUserModelID som tilldelats en process av systemet. Ett program som äger flera processer eller ett program som körs i en värdprocess kan dock uttryckligen behöva identifiera sig så att det kan gruppera sina annars olika fönster under en enda knapp i aktivitetsfältet och styra innehållet i programmets snabblista.
- Application-Defined och System-Defined AppUserModelIDs
- Skapa en Application-Defined AppUserModelID
- Där du tilldelar en AppUserModelID-
- registrera ett program som en värdprocess
- undantagslistor för fästning av aktivitetsfältet och senaste/frekventa listor
- Relaterade ämnen
Application-Defined och System-Defined AppUserModelIDs
Vissa program deklarerar inte ett explicit AppUserModelID. De är valfria. I så fall använder systemet en serie heuristik för att tilldela en intern AppUserModelID. Det finns dock en prestandafördel för att undvika dessa beräkningar och ett explicit AppUserModelID är det enda sättet att garantera en exakt användarupplevelse. Därför rekommenderar vi starkt att du anger ett explicit ID. Program kan inte hämta ett systemtilldelat AppUserModelID.
Om ett program använder ett explicit AppUserModelID måste det även tilldela samma AppUserModelID till alla windows- eller processer som körs, genvägar och filassociationer. Den måste också använda appuserModelID när du anpassar hopplistan via ICustomDestinationListoch i alla anrop till SHAddToRecentDocs.
Not
Om program inte har ett explicit AppUserModelID måste de anropa IApplicationDestinations, IApplicationDocumentListsoch ICustomDestinationList metoder samt SHAddToRecentDocs inifrån programmet. Om dessa metoder anropas från en annan process, till exempel en installationsprogram eller avinstallation, kan systemet inte generera rätt AppUserModelID och dessa anrop har ingen effekt.
Följande objekt beskriver vanliga scenarier som kräver ett explicit AppUserModelID. De pekar också på fall där flera explicita AppUserModelID:er ska användas.
En enda körbar fil med ett användargränssnitt med flera lägen som visas för användaren som separata program bör tilldela olika AppUserModelID:er till varje läge. Till exempel bör en del av ett program som användarna ser som en oberoende upplevelse som de kan fästa till och starta från aktivitetsfältet separat från resten av programmet ha ett eget AppUserModelID, separat från huvudupplevelsen.
Flera genvägar med olika argument som alla leder till vad användaren ser som samma program bör använda ett AppUserModelID för alla genvägar. Till exempel har Windows Internet Explorer olika genvägar för olika lägen (till exempel att starta utan tillägg) men alla bör visas för användaren som en enda Internet Explorer-instans.
En körbar fil som fungerar som en värdprocess och kör målinnehåll som ett program måste registrera sig som ett värdprogram, varefter det kan tilldela olika AppUserModelIDs till varje upplevd upplevelse som det är värd för. Värdprocessen kan också göra det möjligt för det värdbaserade programmet att ange sina AppUserModelIDs. I båda fallen måste värdprocessen föra en post över källan till AppUserModelIDs, antingen sig själv eller det värdbaserade programmet. I det här fallet finns det ingen primär användarupplevelse av värdprocessen utan målinnehållet. Exempel är Windows Remote Applications Integrated Locally (RAIL), Java Runtime, RunDLL32.exeeller DLLHost.exe.
När det gäller befintliga värdbaserade program försöker systemet identifiera enskilda upplevelser, men nya program bör använda explicita AppUserModelID:er för att garantera den avsedda användarupplevelsen.
Samarbetsprocesser eller länkade processer som användaren är en del av samma program bör ha samma AppUserModelID tillämpat på varje process. Exempel är spel med en startprocess (länkad) och Microsoft Windows Media Player, som har en första körning/konfigurationsupplevelse som körs i en process och huvudprogrammet som körs i en annan process (kooperativ).
Ett Shell-namnområdestillägg som fungerar som ett separat program för mer än att bläddra och hantera innehåll i Utforskaren bör tilldela ett AppUserModelID i dess mappegenskaper. Ett exempel är Kontrollpanelen.
I en virtualiseringsmiljö, till exempel ett distributionsramverk, bör virtualiseringsmiljön tilldela olika AppUserModelID:er till varje program som hanteras. I dessa fall använder en programstartare en mellanliggande process för att konfigurera miljön och lämnar sedan bort åtgärden till en annan process för att köra programmet. Observera att detta gör att systemet inte kan relatera den aktiva målprocessen tillbaka till genvägen eftersom genvägen pekar på mellanhandsprocessen.
Om något program har flera fönster, genvägar eller processer bör programmets tilldelade AppUserModelID också tillämpas på var och en av dessa delar av virtualiseringsmiljön.
Ett exempel på den här situationen är ClickOnce-ramverket, som tilldelar AppUserModelID:er på rätt sätt för de program som det hanterar. Som i alla sådana miljöer bör program som distribueras och hanteras av ClickOnce inte tilldela explicita AppUserModelIDs själva, eftersom detta kommer att hamna i konflikt med AppUserModelIDs som tilldelats av ClickOnce och leda till oväntade resultat.
Skapa ett Application-Defined AppUserModelID
Ett program måste ange sitt AppUserModelID i följande formulär. Den får inte innehålla fler än 128 tecken och får inte innehålla blanksteg. Varje avsnitt ska vara pascal-cased.
CompanyName.ProductName.SubProduct.VersionInformation
CompanyName
och ProductName
bör alltid användas, medan SubProduct
- och VersionInformation
-delarna är valfria och beror på programmets krav.
SubProduct
tillåter ett huvudprogram som består av flera underprogram att tillhandahålla en separat knapp i aktivitetsfältet för varje underprogram och tillhörande fönster.
VersionInformation
gör att två versioner av ett program kan samexistera samtidigt som de ses som diskreta entiteter. Om ett program inte är avsett att användas på det sättet bör VersionInformation
utelämnas så att en uppgraderad version kan använda samma AppUserModelID som den version som det ersatte.
Var du tilldelar ett AppUserModelID
När ett program använder en eller flera explicita AppUserModelID:er bör det tillämpa dessa AppUserModelID:er på följande platser och situationer:
I egenskapen System.AppUserModel.ID för programmets genvägsfil. En genväg (som en IShellLink-, CLSID_ShellLink eller en .lnk-fil) stöder egenskaper via IPropertyStore och andra egenskapsinställningsmekanismer som används i hela Gränssnittet. Detta gör att aktivitetsfältet kan identifiera rätt genväg för att fästa och ser till att fönster som tillhör processen är lämpligt associerade med den aktivitetsfältet.
Not
Egenskapen System.AppUserModel.ID ska tillämpas på en genväg när genvägen skapas. När du använder Microsoft Windows Installer (MSI) för att installera programmet kan tabellen MsiShortcutProperty använda AppUserModelID på genvägen när den skapas under installationen.
Som en egenskap för något av programmets fönster som körs. Detta kan anges på något av två sätt:
- Om olika fönster som ägs av en process kräver olika AppUserModelID:er för att styra gruppering av aktivitetsfältet använder du SHGetPropertyStoreForWindow) för att hämta fönstrets egenskapsarkiv och ange AppUserModelID som en fönsteregenskap.
- Om alla fönster i processen använder samma AppUserModelID anger du AppUserModelID på processen men SetCurrentProcessExplicitAppUserModelID. Ett program måste anropa SetCurrentProcessExplicitAppUserModelID för att ange dess AppUserModelID under programmets första startrutin innan programmet presenterar något användargränssnitt, gör någon manipulation av sina snabblistor eller gör (eller gör att systemet gör) alla anrop till SHAddToRecentDocs.
Ett AppUserModelID på fönsternivå åsidosätter ett AppUserModelID på processnivå.
När ett program anger ett explicit AppUserModelID på fönsternivå kan programmet ange detaljerna för kommandot för att starta om för aktivitetsfältet. För att ange den informationen används följande egenskaper:
- System.AppUserModel.RelaunchCommand
- System.AppUserModel.RelaunchDisplayNameResource
- System.AppUserModel.RelaunchIconResource
Not
Om det finns en genväg för att starta programmet bör ett program använda AppUserModelID som en egenskap för genvägen i stället för att använda återlanseringsegenskaperna. I så fall används kommandoraden, ikonen och texten i genvägen för att ange samma information som egenskaperna för nystart.
En explicit AppUserModelID på fönsternivå kan också använda egenskapen System.AppUserModel.PreventPinning för att ange att den inte ska vara tillgänglig för att fästa eller starta om.
I ett anrop för att anpassa eller uppdatera (ICustomDestinationList) hämtar du (IApplicationDocumentLists) eller avmarkerar (IApplicationDestinations) programmets jumplista.
I filassociationsregistrering (via dess ProgID) om programmet använder systemets automatiskt genererade senaste eller listor med frekventa mål. Den här associationsinformationen refereras av SHAddToRecentDocs. Den här informationen används också när du lägger till IShellItem- mål i anpassade hopplistor via ICustomDestinationList::AppendCategory.
I alla anrop som programmet gör direkt till SHAddToRecentDocs. Om programmet är beroende av den gemensamma fildialogrutan för att göra anrop till SHAddToRecentDocs för dess räkning, kan dessa anrop endast härleda det explicita AppUserModelID om AppUserModelID har angetts för hela processen. Om programmet anger AppUserModelIDs i sina fönster i stället för på processen måste programmet göra alla anrop till SHAddToRecentDocs sig själv, med sin explicita AppUserModelID, samt förhindra att den gemensamma fildialogrutan gör sina egna anrop. Detta måste göras när ett objekt öppnas för att säkerställa att Senaste eller Frekvent avsnitt i programmets snabblista är korrekta.
Följande objekt beskriver vanliga scenarier och var du kan använda explicita AppUserModelIDs i dessa scenarier.
- När en enskild process innehåller flera program använder du SHGetPropertyStoreForWindow för att hämta fönstrets egenskapsarkiv och ange AppUserModelID som en fönsteregenskap.
- När ett program använder flera processer tillämpar du AppUserModelID på varje process. Om du använder samma AppUserModelID på varje process beror på om du vill att varje process ska visas som en del av huvudprogrammet eller som enskilda entiteter.
- Om du vill separera vissa fönster från en uppsättning i samma process använder du fönstrets egenskapsarkiv för att tillämpa ett enda AppUserModelID på de fönster som du vill separera och sedan tillämpa ett annat AppUserModelID på processen. Alla fönster i den processen som inte uttryckligen har märkts med AppUserModelID på fönsternivå ärver Processens AppUserModelID.
- Om en filtyp är associerad med ett program tilldelar du AppUserModelID i filtypens ProgID registrering. Om en enda körbar fil startas i olika lägen som visas för användaren som distinkta program krävs ett separat AppUserModelID för varje läge. I så fall måste det finnas flera ProgID-registreringar för filtypen, var och en med olika AppUserModelID.
- Om det finns flera genvägsplatser där en användare kan starta ett program (på menyn Start, på skrivbordet eller någon annanstans) hämtar du genvägens egenskapsarkiv för att tillämpa ett enda AppUserModelID på alla genvägar som genvägsegenskaper.
- När ett explicit anrop görs till SHAddToRecentDocs av ett program använder du AppUserModelID i anropet. När den gemensamma fildialogrutan används för att öppna eller spara filer anropas SHAddToRecentDocs av dialogrutan för programmets räkning. Det anropet kan härleda det explicita AppUserModelID från processen. Men om ett explicit AppUserModelID används som en fönsteregenskap kan den gemensamma fildialogrutan inte fastställa rätt AppUserModelID. I så fall måste själva programmet uttryckligen anropa SHAddToRecentDocs och förse det med rätt AppUserModelID. Dessutom måste programmet förhindra att den gemensamma fildialogrutan anropar SHAddToRecentDocs för dess räkning genom att ange flaggan FOS_DONTADDTORECENT i metoden GetOptionsIFileOpenDialog eller IFileSaveDialog.
Registrera ett program som en värdprocess
Ett program kan ange registerposten IsHostApp så att den körbara processen betraktas som en värdprocess av aktivitetsfältet. Detta påverkar dess grupperings- och standardposter i Jump List.
I följande exempel visas den nödvändiga registerposten. Observera att posten inte har tilldelats något värde. dess närvaro är allt som krävs. Det är ett REG_NULL värde.
HKEY_CLASSES_ROOT
Applications
example.exe
IsHostApp
Om själva processen eller genvägsfilen som används för att starta processen har ett explicit AppUserModelID ignoreras värdprocesslistan och programmet behandlas som ett normalt program av aktivitetsfältet. Programmets fönster som körs grupperas tillsammans under en enda knapp i aktivitetsfältet och programmet kan fästas i aktivitetsfältet.
Om endast körningsprocessens körbara namn är känt, utan en explicit AppUserModelID, och den körbara filen finns i listan över värdprocesser, behandlas varje instans av processen som en separat entitet för gruppering av aktivitetsfältet. Aktivitetsfältets knapp som är associerad med en specifik instans av processen visar inte något pin-/unpin-alternativ eller en startikon för en ny instans av processen. Processen är inte heller berättigad till inkludering i Start-menyns MFU-lista (Mest använda). Men om processen startades via en genväg som innehåller startargument (vanligtvis målinnehållet som ska vara värd för "programmet" kan systemet fastställa identiteten och programmet kan fästas och startas om.
Undantagslistor för fästning i aktivitetsfältet och senaste/frekventa listor
Program, processer och fönster kan välja att göra sig otillgängliga för att fästa i aktivitetsfältet eller för att inkluderas i Start-menyns MFU-lista. Det finns tre mekanismer för att åstadkomma detta:
Lägg till posten NoStartPage i programmets registrering enligt följande:
HKEY_CLASSES_ROOT Applications Example.exe NoStartPage
Data som är associerade med posten NoStartPage ignoreras. Endast närvaro av posten krävs. Därför är den idealiska typen för NoStartPage REG_NONE.
Observera att all användning av ett explicit AppUserModelID åsidosätter posten NoStartPage. Om ett explicit AppUserModelID tillämpas på en genväg, process eller ett fönster blir det fästbart och berättigat till MFU-listan Start-menyn.
Ange egenskapen System.AppUserModel.PreventPinning på fönster och genvägar. Den här egenskapen måste anges i ett fönster innan egenskapen PKEY_AppUserModel_ID.
Lägg till ett explicit AppUserModelID som ett värde under följande registerundernyckel enligt nedan:
HKEY_LOCAL_MACHINE Software Microsoft Windows CurrentVersion Explorer FileAssociation NoStartPageAppUserModelIDs AppUserModelID1 AppUserModelID2 AppUserModelID3
Varje post är ett REG_NULL värde med namnet på AppUserModelID. Alla AppUserModelID som finns i den här listan kan inte fästas och kan inte tas med i MFU-listan Start-menyn.
Tänk på att vissa körbara filer samt genvägar som innehåller vissa strängar i deras namn automatiskt undantas från att fästas och inkluderas i MFU-listan.
Not
Det här automatiska undantaget kan åsidosättas genom att använda ett explicit AppUserModelID.
Om någon av följande strängar, oavsett fall, ingår i genvägsnamnet kan programmet inte fästas och visas inte i listan som används oftast (gäller inte för Windows 10):
- Dokumentation
- Hjälp
- Installera
- Mer information
- Läs mig
- Läs först
- Readme
- Avlägsna
- Installationen
- Stöd
- Vad är det senaste
Följande lista över program kan inte fästas och undantas från listan som används oftast.
- 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
Ovanstående listor lagras i följande registervärden.
Not
Dessa listor bör inte ändras av program. Använd någon av de metoder för undantagslista som angavs tidigare för samma upplevelse.
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FileAssociation
AddRemoveApps
HostApps
Relaterade ämnen