Megosztás a következőn keresztül:


Alkalmazásfelhasználói modell azonosítói (AppUserModelIDs)

Az alkalmazásfelhasználói modell azonosítóit (AppUserModelID-eket) a Windows 7 és újabb rendszerek tálcája széles körben használja a folyamatok, fájlok és ablakok adott alkalmazáshoz való társításához. Bizonyos esetekben elegendő a rendszer által egy folyamathoz hozzárendelt belső AppUserModelID-re támaszkodni. Előfordulhat azonban, hogy egy több folyamatot vagy egy gazdagépfolyamatban futó alkalmazást futtató alkalmazásnak explicit módon kell azonosítania magát, hogy az egyébként különálló ablakait egyetlen tálcagomb alatt csoportosíthassa, és szabályozhassa az alkalmazás jumplistájának tartalmát.

Application-Defined és System-Defined AppUserModelIDs

Egyes alkalmazások nem deklarálnak explicit AppUserModelID azonosítót. Ezek nem kötelezőek. Ebben az esetben a rendszer heurisztikus elemek sorozatával rendel hozzá egy belső AppUserModelID azonosítót. A számítások elkerülése azonban teljesítménnyel jár, és a pontos felhasználói élmény garantálásának egyetlen módja az explicit AppUserModelID. Ezért erősen ajánlott explicit azonosítót beállítani. Az alkalmazások nem tudják lekérni a rendszer által hozzárendelt AppUserModelID azonosítót.

Ha egy alkalmazás explicit AppUserModelID azonosítót használ, ugyanazt az AppUserModelID azonosítót kell hozzárendelnie az összes futó ablakhoz vagy folyamathoz, parancsikonhoz és fájltársításhoz. Ezt az AppUserModelID azonosítót is használnia kell a jump listának ICustomDestinationList, valamint az SHAddToRecentDocshívásaiban.

Jegyzet

Ha az alkalmazások nem rendelkeznek explicit AppUserModelID azonosítóval, IApplicationDestinations, IApplicationDocumentListsés ICustomDestinationList metódusokat, valamint SHAddToRecentDocs kell meghívniuk az alkalmazáson belülről. Ha ezeket a metódusokat egy másik folyamatból, például telepítőből vagy eltávolítóból hívják meg, a rendszer nem tudja létrehozni a megfelelő AppUserModelID azonosítót, és ezek a hívások nem lesznek hatással.

 

Az alábbi elemek olyan gyakori forgatókönyveket ismertetnek, amelyek explicit AppUserModelID azonosítót igényelnek. Rámutatnak azokra az esetekre is, amikor több explicit AppUserModelID-t kell használni.

  • A felhasználó számára különálló alkalmazásként megjelenő, több módú felhasználói felülettel rendelkező végrehajtható fájloknak különböző AppUserModelID-eket kell hozzárendelni minden egyes módhoz. Egy olyan alkalmazásnak például, amelyet a felhasználók független felületnek tekintenek, amelyet a tálcáról rögzíthetnek és indíthatnak el az alkalmazás többi részétől elkülönítve, saját AppUserModelID azonosítóval kell rendelkezniük, a fő felülettől elkülönítve.

  • Több billentyűparancs különböző argumentumokkal, amelyek mind ahhoz vezetnek, hogy a felhasználó ugyanazt az alkalmazást látja, az összes parancsikonhoz egy AppUserModelID azonosítót kell használnia. A Windows Internet Explorer például különböző parancsikonokkal rendelkezik a különböző módokhoz (például bővítmények nélküli indításhoz), de mindegyiknek egyetlen Internet Explorer-példányként kell megjelennie a felhasználó számára.

  • Egy gazdafolyamatként működő és céltartalmat alkalmazásként futtató végrehajtható példánynak gazdaalkalmazáskéntregisztrálnia, amely után különböző AppUserModelID-eket rendelhet az általa üzemeltetett összes észlelt felülethez. Másik lehetőségként a gazdagépfolyamat lehetővé teszi, hogy a üzemeltetett program beállítsa az AppUserModelID-eket. Mindkét esetben a gazdafolyamatnak nyilván kell tartania az AppUserModelID-k forrását, akár magát, akár az üzemeltetett alkalmazást. Ebben az esetben nincs elsődleges felhasználói élmény a gazdagépfolyamatban a céltartalom nélkül. Ilyenek például a helyileg integrált Windows távoli alkalmazások (RAIL), a Java-futtatókörnyezet, a RunDLL32.exevagy a DLLHost.exe.

    Meglévő üzemeltetett alkalmazások esetén a rendszer megkísérli azonosítani az egyéni élményeket, de az új alkalmazásoknak explicit AppUserModelID-eket kell használniuk a kívánt felhasználói élmény garantálásához.

  • A felhasználónak ugyanazon alkalmazás részét képező együttműködési vagy láncolt folyamatoknak minden egyes folyamatra ugyanazt az AppUserModelID azonosítót kell alkalmazniuk. Ilyenek például a indítófolyamattal (láncolt) és a Microsoft Windows Media Playerrel rendelkező játékok, amelyek első futtatási/beállítási tapasztalattal rendelkeznek az egyik folyamatban, és a fő alkalmazás egy másik folyamatban (kooperatív) futnak.

  • A Rendszerhéj névtérbővítményének, amely külön alkalmazásként működik a Windows Intézőben a tartalom böngészése és kezelése helyett, hozzá kell rendelnie egy AppUserModelID azonosítót a mappatulajdonságaihoz. Ilyen például a Vezérlőpult.

  • Egy virtualizálási környezetben, például egy üzembehelyezési keretrendszerben a virtualizálási környezetnek különböző AppUserModelID-eket kell hozzárendelnie minden általa kezelt alkalmazáshoz. Ezekben az esetekben az alkalmazásindító egy közvetítő folyamatot használ a környezet beállításához, majd átadja a műveletet egy másik folyamatnak az alkalmazás futtatásához. Vegye figyelembe, hogy emiatt a rendszer nem tudja összekapcsolni a futó célfolyamatot a parancsikonhoz, mert a parancsikon a köztes folyamatra mutat.

    Ha egy alkalmazás több ablakkal, parancsikonokkal vagy folyamatokkal rendelkezik, az alkalmazás hozzárendelt AppUserModelID azonosítóját a virtualizálási környezetnek is mindegyikre alkalmaznia kell.

    Erre példa a ClickOnce keretrendszer, amely megfelelően hozzárendeli az AppUserModelID-eket az általa kezelt alkalmazások nevében. Mint minden ilyen környezetben, a ClickOnce által üzembe helyezett és felügyelt alkalmazásoknak nem szabad explicit AppUserModelID-eket hozzárendelniük, mert ez ütközik a ClickOnce által hozzárendelt AppUserModelID-ekkel, és váratlan eredményekhez vezet.

Application-Defined AppUserModelID létrehozása

Egy alkalmazásnak meg kell adnia az AppUserModelID azonosítóját az alábbi formában. Legfeljebb 128 karakter hosszúságú lehet, és nem tartalmazhat szóközöket. Minden szakaszt pascal-case-nek kell lennie.

CompanyName.ProductName.SubProduct.VersionInformation

mindig CompanyName és ProductName kell használni, míg a SubProduct és VersionInformation részek nem kötelezőek, és az alkalmazás követelményeitől függenek. SubProduct lehetővé teszi, hogy egy több alalkalmazásból álló főalkalmazás külön tálcagombot biztosítson az egyes alalkalmazásokhoz és a hozzá tartozó ablakokhoz. VersionInformation lehetővé teszi, hogy az alkalmazás két verziója egymás mellett létezzen, miközben különálló entitásoknak tekintik őket. Ha egy alkalmazást nem így kíván használni, a VersionInformation ki kell hagyni, hogy a frissített verzió ugyanazt az AppUserModelID azonosítót használhassa, mint a lecserélt verzió.

AppUserModelID hozzárendelésének helye

Ha egy alkalmazás egy vagy több explicit AppUserModelID-t használ, az appUserModelID-eket a következő helyeken és helyzetekben kell alkalmaznia:

  • Az alkalmazás parancsikonfájljának System.AppUserModel.ID tulajdonságában. A parancsikonok (IShellLink, CLSID_ShellLink vagy .lnk fájlok) támogatják a tulajdonságokat IPropertyStore és a Shellben használt egyéb tulajdonságbeállítási mechanizmusokon keresztül. Ez lehetővé teszi a tálcán a rögzítéshez szükséges parancsikon azonosítását, és biztosítja, hogy a folyamathoz tartozó ablakok megfelelően legyenek társítva a tálcához.

    Jegyzet

    A parancsikon létrehozásakor a System.AppUserModel.ID tulajdonságot egy parancsikonra kell alkalmazni. Amikor a Microsoft Windows Installert (MSI) használja az alkalmazás telepítéséhez, az MsiShortcutProperty tábla lehetővé teszi, hogy az AppUserModelID a telepítés során történő létrehozásakor a parancsikonra legyen alkalmazva.

     

  • Az alkalmazás bármelyik futó ablakának tulajdonságaként. Ez kétféleképpen állítható be:

    1. Ha az egyik folyamat különböző ablakaihoz különböző AppUserModelID-ek szükségesek a tálcák csoportosításának szabályozásához, használja SHGetPropertyStoreForWindow) parancsot az ablak tulajdonságtárolójának lekéréséhez, és állítsa be az AppUserModelID azonosítót ablaktulajdonságként.
    2. Ha a folyamat összes ablaka ugyanazt az AppUserModelID azonosítót használja, állítsa be az AppUserModelID azonosítót a folyamaton, bár SetCurrentProcessExplicitAppUserModelID. Az alkalmazásnak meg kell hívnia SetCurrentProcessExplicitAppUserModelID, hogy beállítsa az AppUserModelID azonosítóját az alkalmazás kezdeti indítási rutinja során, mielőtt az alkalmazás bármilyen felhasználói felületet bemutat, módosítja a jumplistákat, vagy bármilyen hívást kezdeményez (vagy a rendszer kezdeményezi) az SHAddToRecentDocs.

    Az ablakszintű AppUserModelID felülír egy folyamatszintű AppUserModelID azonosítót.

    Amikor egy alkalmazás explicit AppUserModelID azonosítót állít be az ablak szintjén, az alkalmazás megadhatja a tálcagomb újraindítási parancsának sajátosságait. Az információk megadásához a következő tulajdonságokat használja a rendszer:

    Jegyzet

    Ha van egy parancsikon az alkalmazás elindításához, az alkalmazásnak a parancsikon tulajdonságaként kell alkalmaznia az AppUserModelID azonosítót az újraindítási tulajdonságok használata helyett. Ebben az esetben a parancsikon parancssora, ikonja és szövege ugyanazt az információt adja meg, mint az újraindítási tulajdonságok.

     

    Az ablakszintű explicit AppUserModelID az System.AppUserModel.PreventPinning tulajdonságot is használhatja annak megadásához, hogy az ne legyen elérhető rögzítéshez vagy újraindításhoz.

  • Az ICustomDestinationListtestreszabására vagy frissítésére irányuló hívásban kérje le (IApplicationDocumentLists), vagy törölje (IApplicationDestinations) az alkalmazás jumplistáját.

  • Fájltársítási regisztrációban (a ProgIDkeresztül), ha az alkalmazás a rendszer automatikusan létrehozott Legutóbbi vagy Gyakori céllistákat használja. Erre a társítási információra SHAddToRecentDocshivatkozik. Ez az információ akkor is használatos, ha IShellItem-célhelyeket ad hozzá az egyéni jumplistákhoz ICustomDestinationList::AppendCategory.

  • Minden hívásban az alkalmazás közvetlenül SHAddToRecentDocs. Ha az alkalmazás a közös fájl párbeszédpaneltől függ, hogy hívásokat kezdeményezhessen SHAddToRecentDocs nevében, ezek a hívások csak akkor vonhatják le az explicit AppUserModelID azonosítót, ha az AppUserModelID be van állítva a teljes folyamathoz. Ha az alkalmazás az AppUserModelID-eket a folyamat helyett az ablakára állítja be, az alkalmazásnak minden hívást meg kell indítania SHAddToRecentDocs az explicit AppUserModelID azonosítójával, valamint meg kell akadályoznia, hogy a közös fájl párbeszédpanel saját hívásokat indítson. Ezt minden alkalommal meg kell tenni, amikor megnyit egy elemet, hogy az alkalmazás jumplistájának legutóbbi vagy gyakori szakaszok pontosak legyenek.

Az alábbi elemek ismertetik a gyakori forgatókönyveket, és hogy hol alkalmazhatók explicit AppUserModelID-k ezekben a forgatókönyvekben.

  • Ha egyetlen folyamat több alkalmazást tartalmaz, az SHGetPropertyStoreForWindow használatával kérje le az ablak tulajdonságtárolóját, és állítsa be az AppUserModelID azonosítót ablaktulajdonságként.
  • Ha egy alkalmazás több folyamatot használ, alkalmazza az AppUserModelID azonosítót minden egyes folyamatra. Attól függ, hogy ugyanazt az AppUserModelID-et használja-e az egyes folyamatokhoz, attól függ, hogy az egyes folyamatok a fő alkalmazás részeként vagy egyéni entitásokként jelennek-e meg.
  • Ha el szeretne különíteni bizonyos ablakokat egy adott halmaztól ugyanabban a folyamatban, az ablak tulajdonságtárolójával egyetlen AppUserModelID azonosítót alkalmazhat azokra az ablakokra, amelyeket el szeretne különíteni, majd egy másik AppUserModelID azonosítót alkalmazhat a folyamatra. A folyamat azon ablakai, amelyek nincsenek explicit módon megjelölve az ablakszintű AppUserModelID azonosítóval, öröklik a folyamat AppUserModelID azonosítóját.
  • Ha egy fájltípus egy alkalmazáshoz van társítva, rendelje hozzá az AppUserModelID azonosítót a fájltípus ProgID regisztrációhoz. Ha egyetlen végrehajtható fájl különböző módban indul el, amelyek különálló alkalmazásokként jelennek meg a felhasználó számára, minden módhoz külön AppUserModelID azonosítóra van szükség. Ebben az esetben a fájltípushoz több ProgID-regisztrációnak kell lennie, amelyek mindegyike más AppUserModelID azonosítóval rendelkezik.
  • Ha több olyan helyi hely is van, ahonnan a felhasználó elindíthat egy alkalmazást (a Start menüben, az asztalon vagy máshol) kérje le a parancsikon tulajdonságtárolóját, hogy egyetlen AppUserModelID azonosítót alkalmazzon az összes parancsikonra billentyűparancs-tulajdonságokként.
  • Ha egy alkalmazás explicit hívást kezdeményez az SHAddToRecentDocs , használja az AppUserModelID azonosítót a hívásban. Ha a közös fájl párbeszédpanelt használják a fájlok megnyitásához vagy mentéséhez, SHAddToRecentDocs az alkalmazás nevében a párbeszédpanel hívja meg. Ez a hívás a folyamat explicit AppUserModelID azonosítóját is kikövetkezheti. Ha azonban egy explicit AppUserModelID ablaktulajdonságként van alkalmazva, a közös fájl párbeszédpanel nem tudja meghatározni a megfelelő AppUserModelID azonosítót. Ebben az esetben az alkalmazásnak explicit módon meg kell hívnia SHAddToRecentDocs, és meg kell adnia a megfelelő AppUserModelID azonosítót. Ezenkívül az alkalmazásnak meg kell akadályoznia, hogy a közös fájl párbeszédpanel meghívja SHAddToRecentDocs nevében azáltal, hogy az FOS_DONTADDTORECENT GetOptionsIFileOpenDialog vagy IFileSaveDialog.

Alkalmazás regisztrálása gazdagépfolyamatként

Egy alkalmazás beállíthatja az IsHostApp beállításjegyzék-bejegyzést úgy, hogy a végrehajtható folyamat gazdafolyamatnak minősüljön a tálcán. Ez hatással van a csoportosításra és az alapértelmezett Jump List-bejegyzésekre.

Az alábbi példa a szükséges beállításjegyzék-bejegyzést mutatja be. Vegye figyelembe, hogy a bejegyzés nincs hozzárendelve értékhez; jelenléte minden, ami szükséges. Ez egy REG_NULL érték.

HKEY_CLASSES_ROOT
   Applications
      example.exe
         IsHostApp

Ha maga a folyamat vagy a folyamat elindításához használt parancsikonfájl explicit AppUserModelID azonosítóval rendelkezik, akkor a rendszer figyelmen kívül hagyja a gazdagép folyamatlistáját, és a tálcán normál alkalmazásként kezeli az alkalmazást. Az alkalmazás futó ablakai egyetlen tálcagomb alatt vannak csoportosítva, és az alkalmazás rögzíthető a tálcára.

Ha csak a futó folyamat végrehajtható neve ismert, explicit AppUserModelID nélkül, és ez a végrehajtható fájl szerepel a gazdagép folyamatlistájában, akkor a rendszer a folyamat minden példányát külön entitásként kezeli a tálcák csoportosításához. A folyamat egy adott példányához társított tálcán nem jelenik meg a pin/unpin beállítás vagy a folyamat új példányának indítási ikonja. A folyamat nem vehető fel a Start menü leggyakrabban használt (MFU) listájába. Ha azonban a folyamatot indítási argumentumokat tartalmazó parancsikonon keresztül indították el (általában az "alkalmazásként" üzemeltetendő céltartalmat), a rendszer meghatározhatja az identitást, és az alkalmazás rögzíthető és újraindítható.

Kizárási listák a tálcán való rögzítéshez és a legutóbbi/gyakori listákhoz

Az alkalmazások, folyamatok és ablakok dönthetnek úgy, hogy elérhetetlenné teszik magukat a tálcán való rögzítéshez vagy a Start menü MFU-listájában való felvételhez. Ennek három mechanizmusa van:

  1. Adja hozzá a NoStartPage bejegyzést az alkalmazás regisztrációhoz az itt látható módon:

    HKEY_CLASSES_ROOT
       Applications
          Example.exe
             NoStartPage
    

    A NoStartPage bejegyzéshez társított adatok figyelmen kívül lesznek hagyva. Csak a bejegyzés jelenlétére van szükség. Ezért a NoStartPage ideális típusa REG_NONE.

    Vegye figyelembe, hogy az explicit AppUserModelID használata felülírja a NoStartPage bejegyzést. Ha explicit AppUserModelID-et alkalmaz egy parancsikonra, folyamatra vagy ablakra, az rögzíthetővé válik, és jogosult lesz a Start menü MFU-listájára.

  2. Állítsa be a System.AppUserModel.PreventPinning tulajdonságot az ablakokon és a billentyűparancsokon. Ezt a tulajdonságot a PKEY_AppUserModel_ID tulajdonság előtti ablakban kell beállítani.

  3. Adjon hozzá egy explicit AppUserModelID azonosítót értékként a következő beállításjegyzék-alkulcsban az itt látható módon:

    HKEY_LOCAL_MACHINE
       Software
          Microsoft
             Windows
                CurrentVersion
                   Explorer
                      FileAssociation
                         NoStartPageAppUserModelIDs
                            AppUserModelID1
                            AppUserModelID2
                            AppUserModelID3
    

    Minden bejegyzés egy REG_NULL érték az AppUserModelID nevével. A listában található AppUserModelID nem rögzíthető, és nem vehető fel a Start menü MFU listájába.

Vegye figyelembe, hogy bizonyos végrehajtható fájlok, valamint a nevükben bizonyos sztringeket tartalmazó parancsikonok automatikusan ki lesznek zárva az MFU-listában való rögzítésből és felvételből.

Jegyzet

Ez az automatikus kizárás felülírható egy explicit AppUserModelID alkalmazásával.

 

Ha az alábbi sztringek bármelyike szerepel a parancsikonnévben, a program nem rögzíthető, és nem jelenik meg a leggyakrabban használt listában (windows 10 esetén nem alkalmazható):

  • Dokumentáció
  • Segítség
  • Felszerel
  • További információ
  • Olvasson fel
  • Első olvasás
  • Readme
  • Eltávolít
  • Beállít
  • Támogat
  • Mi újság

A programok alábbi listája nem rögzíthető, és nem szerepel a leggyakrabban használt listán.

  • 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

Az előző listák a következő beállításjegyzék-értékekben vannak tárolva.

Jegyzet

Ezeket a listákat az alkalmazások nem módosíthatják. Használja a korábban felsorolt kizárási lista egyik metódusát ugyanahhoz a felülethez.

 

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FileAssociation
                     AddRemoveApps
                     HostApps

SetCurrentProcessExplicitAppUserModelID

GetCurrentProcessExplicitAppUserModelID

tálcabővítmények

ICustomDestinationList::SetAppID

IApplicationDocumentLists::SetAppID

IApplicationDestinations::SetAppID

SHGetPropertyStoreForWindow