Identyfikatory modelu użytkownika aplikacji (AppUserModelIDs)
Identyfikatory modelu użytkownika aplikacji (AppUserModelID) są szeroko używane przez pasek zadań w systemach Windows 7 i nowszych do kojarzenia procesów, plików i okien z określoną aplikacją. W niektórych przypadkach wystarczy opierać się na wewnętrznym identyfikatorze AppUserModelID przypisanym do procesu przez system. Jednak aplikacja, która jest właścicielem wielu procesów lub aplikacji uruchomionej w procesie hosta, może być konieczne jawne zidentyfikowanie się, aby można było zgrupować w inny sposób różne okna pod jednym przyciskiem paska zadań i kontrolować zawartość listy przeskoku tej aplikacji.
- Application-Defined i System-Defined AppUserModelIDs
- Jak utworzyć Application-Defined AppUserModelID
- Gdzie przypisać identyfikator AppUserModelID
- rejestrowanie aplikacji jako procesu hosta
- listy wykluczeń dla przypinania paska zadań i ostatnich/częstych list
- Tematy pokrewne
Application-Defined i System-Defined AppUserModelIDs
Niektóre aplikacje nie deklarują jawnego identyfikatora AppUserModelID. Są one opcjonalne. W takim przypadku system używa serii heurystyki do przypisania wewnętrznego identyfikatora AppUserModelID. Jednak istnieje korzyść z wydajności podczas unikania tych obliczeń, a jawny identyfikator AppUserModelID jest jedynym sposobem zagwarantowania dokładnego środowiska użytkownika. Dlatego zdecydowanie zaleca się ustawienie jawnego identyfikatora. Aplikacje nie mogą pobrać przypisanego przez system identyfikatora AppUserModelID.
Jeśli aplikacja używa jawnego identyfikatora AppUserModelID, musi również przypisać ten sam identyfikator AppUserModelID do wszystkich uruchomionych okien lub procesów, skrótów i skojarzeń plików. Należy również użyć tego identyfikatora AppUserModelID podczas dostosowywania listy przeskoków za pośrednictwem ICustomDestinationListi we wszystkich wywołaniach SHAddToRecentDocs.
Nuta
Jeśli aplikacje nie mają jawnego identyfikatora AppUserModelID, muszą wywoływać metody IApplicationDestinations, IApplicationDocumentListsi ICustomDestinationList metod, a także SHAddToRecentDocs z poziomu aplikacji. Jeśli te metody są wywoływane z innego procesu, takiego jak instalator lub odinstalowywanie, system nie może wygenerować poprawnego identyfikatora AppUserModelID, a te wywołania nie będą miały żadnego wpływu.
Poniższe elementy opisują typowe scenariusze, które wymagają jawnego identyfikatora AppUserModelID. Wskazują one również przypadki użycia wielu jawnych identyfikatorów AppUserModelID.
Pojedynczy plik wykonywalny z interfejsem użytkownika z wieloma trybami, które wydają się być wyświetlane użytkownikowi jako oddzielne aplikacje, powinny przypisywać do każdego trybu różne identyfikatory AppUserModelID. Na przykład część aplikacji, którą użytkownicy widzą jako niezależne środowisko, do którego można przypiąć i uruchomić z paska zadań oddzielnie od pozostałej części aplikacji, powinny mieć własny identyfikator AppUserModelID, niezależnie od głównego środowiska.
Wiele skrótów z różnymi argumentami, które prowadzą do tego, co użytkownik widzi jako tę samą aplikację, powinno używać jednego identyfikatora AppUserModelID dla wszystkich skrótów. Na przykład program Windows Internet Explorer ma różne skróty dla różnych trybów (takich jak uruchamianie bez dodatków), ale wszystkie powinny być wyświetlane użytkownikowi jako pojedyncze wystąpienie programu Internet Explorer.
Plik wykonywalny, który działa jako proces hosta i uruchamia docelową zawartość jako aplikację, musi zarejestrować się jako aplikacja hosta, po czym może przypisać różne identyfikatory AppUserModelID do każdego postrzeganego środowiska, które hostuje. Alternatywnie proces hosta może zezwolić hostowanym programowi na ustawienie identyfikatorów AppUserModelID. W obu przypadkach proces hosta musi przechowywać rekord źródła identyfikatorów AppUserModelID, samej lub hostowanej aplikacji. W takim przypadku nie ma podstawowego środowiska użytkownika procesu hosta bez zawartości docelowej. Przykłady to aplikacje zdalne systemu Windows zintegrowane lokalnie (RAIL), środowisko uruchomieniowe Java, RunDLL32.exelub DLLHost.exe.
W przypadku istniejących aplikacji hostowanych system próbuje zidentyfikować poszczególne środowiska, ale nowe aplikacje powinny używać jawnych identyfikatorów AppUserModelID w celu zagwarantowania zamierzonego środowiska użytkownika.
Kooperatywne lub łańcuchowe procesy, które są częścią tej samej aplikacji, powinny mieć ten sam identyfikator AppUserModelID zastosowany do każdego procesu. Przykłady obejmują gry z procesem uruchamiania (łańcuchowym) i Programem Microsoft Windows Media Player, który ma środowisko uruchamiania/konfigurowania uruchomione w jednym procesie oraz główną aplikację działającą w innym procesie (spółdzielnia).
Rozszerzenie przestrzeni nazw powłoki, które działa jako oddzielna aplikacja dla więcej niż przeglądanie zawartości i zarządzanie nią w Eksploratorze Windows, powinno przypisać identyfikator AppUserModelID we właściwościach folderu. Przykładem jest Panel sterowania.
W środowisku wirtualizacji, takim jak struktura wdrażania, środowisko wirtualizacji powinno przypisać różne identyfikatory AppUserModelID do każdej zarządzanej aplikacji. W takich przypadkach uruchamianie aplikacji używa pośredniego procesu konfigurowania środowiska, a następnie przekazuje operację do innego procesu uruchamiania aplikacji. Należy pamiętać, że powoduje to, że system nie może powiązać uruchomionego procesu docelowego ze skrótem, ponieważ skrót wskazuje proces pośredniczący.
Jeśli dowolna aplikacja ma wiele okien, skrótów lub procesów, przypisana przez aplikację appUserModelID powinna być również stosowana do każdego z tych elementów przez środowisko wirtualizacji.
Przykładem takiej sytuacji jest struktura ClickOnce, która prawidłowo przypisuje identyfikatory AppUserModelID w imieniu zarządzanych aplikacji. Podobnie jak we wszystkich takich środowiskach, aplikacje wdrożone i zarządzane przez aplikację ClickOnce nie powinny przypisywać jawnych identyfikatorów AppUserModelID, ponieważ spowoduje to konflikt z identyfikatorami AppUserModelID przypisanymi przez clickOnce i prowadzą do nieoczekiwanych wyników.
Jak utworzyć identyfikator AppUserModelID Application-Defined
Aplikacja musi podać identyfikator AppUserModelID w następującym formularzu. Nie może zawierać więcej niż 128 znaków i nie może zawierać spacji. Każda sekcja powinna mieć wielkość liter w formacie pascal.
CompanyName.ProductName.SubProduct.VersionInformation
CompanyName
i ProductName
należy zawsze używać, a części SubProduct
i VersionInformation
są opcjonalne i zależą od wymagań aplikacji.
SubProduct
umożliwia aplikacji głównej składającej się z kilku podaplikacji, aby udostępnić oddzielny przycisk paska zadań dla każdej podaplikacji i skojarzonych okien.
VersionInformation
umożliwia współistnienie dwóch wersji aplikacji, gdy są postrzegane jako odrębne jednostki. Jeśli aplikacja nie ma być używana w ten sposób, VersionInformation
należy pominąć tak, aby uaktualniona wersja mogła używać tego samego identyfikatora AppUserModelID co wersja, która została zastąpiona.
Gdzie przypisać identyfikator AppUserModelID
Gdy aplikacja używa co najmniej jednego jawnego identyfikatora AppUserModelID, należy zastosować te identyfikatory AppUserModelID w następujących lokalizacjach i sytuacjach:
We właściwości System.AppUserModel.ID pliku skrótu aplikacji. Skrót (jako IShellLink, CLSID_ShellLink lub plik .lnk) obsługuje właściwości za pośrednictwem IPropertyStore i innych mechanizmów ustawień właściwości używanych w całej powłoce. Dzięki temu pasek zadań może zidentyfikować odpowiedni skrót do przypinania i gwarantuje, że okna należące do procesu są odpowiednio skojarzone z tym przyciskiem paska zadań.
Nuta
Właściwość System.AppUserModel.ID powinna zostać zastosowana do skrótu podczas tworzenia tego skrótu. W przypadku instalowania aplikacji za pomocą Instalatora Windows (MSI) msiShortcutPropert y tabela umożliwia zastosowanie identyfikatora AppUserModelID do skrótu podczas jej tworzenia podczas instalacji.
Jako właściwość dowolnego z uruchomionych okien aplikacji. Można to ustawić na jeden z dwóch sposobów:
- Jeśli różne okna należące do jednego procesu wymagają różnych identyfikatorów AppUserModelID do kontrolowania grupowania paska zadań, użyj SHGetPropertyStoreForWindow), aby pobrać magazyn właściwości okna i ustawić AppUserModelID jako właściwość okna.
- Jeśli wszystkie okna procesu używają tego samego identyfikatora AppUserModelID, ustaw identyfikator AppUserModelID w procesie, jednak SetCurrentProcessExplicitAppUserModelID. Aplikacja musi wywołać SetCurrentProcessExplicitAppUserModelID, aby ustawić identyfikator AppUserModelID podczas początkowej procedury uruchamiania aplikacji, zanim aplikacja przedstawi dowolny interfejs użytkownika, wykonuje dowolną manipulację listami skoków lub wykonuje (lub powoduje, że system wykonuje) dowolne wywołanie SHAddToRecentDocs.
Identyfikator AppUserModelID na poziomie okna zastępuje identyfikator AppUserModelID na poziomie procesu.
Gdy aplikacja ustawia jawny identyfikator AppUserModelID na poziomie okna, aplikacja może podać szczegóły polecenia ponownego uruchomienia dla przycisku paska zadań. Aby podać te informacje, używane są następujące właściwości:
- System.AppUserModel.RelaunchCommand
- System.AppUserModel.RelaunchDisplayNameResource
- System.AppUserModel.RelaunchIconResource
Nuta
Jeśli skrót istnieje, aby uruchomić aplikację, aplikacja powinna zastosować identyfikator AppUserModelID jako właściwość skrótu zamiast używać właściwości ponownego uruchamiania. W takim przypadku wiersz polecenia, ikona i tekst skrótu są używane do podawania tych samych informacji co właściwości ponownego uruchamiania.
Jawny identyfikator AppUserModelID na poziomie okna może również użyć właściwości System.AppUserModel.PreventPinning, aby określić, że nie powinna być dostępna do przypinania lub ponownego uruchamiania.
W wywołaniu w celu dostosowania lub zaktualizowania (ICustomDestinationList), pobierz (IApplicationDocumentLists) lub wyczyść (IApplicationDestinations) listy skoków aplikacji.
W rejestracji skojarzenia plików (za pośrednictwem ProgID), jeśli aplikacja używa automatycznie wygenerowanych ostatnich lub często używanych list docelowych. Do tych informacji o skojarzeniu odwołuje się SHAddToRecentDocs. Te informacje są również używane podczas dodawania miejsc docelowych IShellItem do niestandardowych list szybkiego dostępu za pośrednictwem ICustomDestinationList::AppendCategory.
W dowolnym wywołaniu aplikacja wykonuje bezpośrednie polecenie SHAddToRecentDocs. Jeśli aplikacja zależy od wspólnego okna dialogowego pliku, aby wykonywać wywołania SHAddToRecentDocs w jego imieniu, te wywołania mogą wyłudzać jawny identyfikator AppUserModelID tylko wtedy, gdy identyfikator AppUserModelID jest ustawiony dla całego procesu. Jeśli aplikacja ustawia identyfikatory AppUserModelID w oknach zamiast procesu, aplikacja musi wykonać wszystkie wywołania SHAddToRecentDocs się, z jawnym identyfikatorem AppUserModelID, a także uniemożliwić wykonywanie własnych wywołań przez typowe okno dialogowe pliku. Należy to zrobić za każdym razem, gdy element zostanie otwarty, aby upewnić się, że Ostatnie lub częste sekcji listy przeskoku aplikacji są dokładne.
Poniższe elementy opisują typowe scenariusze i sposób stosowania jawnych identyfikatorów AppUserModelID w tych scenariuszach.
- Gdy pojedynczy proces zawiera wiele aplikacji, użyj SHGetPropertyStoreForWindow, aby pobrać magazyn właściwości okna i ustawić identyfikator AppUserModelID jako właściwość okna.
- Gdy aplikacja używa wielu procesów, zastosuj identyfikator AppUserModelID do każdego procesu. Niezależnie od tego, czy używasz tego samego identyfikatora AppUserModelID dla każdego procesu, zależy od tego, czy każdy proces ma być wyświetlany jako część głównej aplikacji, czy jako poszczególne jednostki.
- Aby oddzielić niektóre okna od zestawu w tym samym procesie, użyj magazynu właściwości okna, aby zastosować jeden identyfikator AppUserModelID do tych okien, które chcesz oddzielić, a następnie zastosować inny identyfikator AppUserModelID do procesu. Każde okno w tym procesie, które nie zostało jawnie oznaczone etykietą AppUserModelID na poziomie okna dziedziczy identyfikator AppUserModelID procesu.
- Jeśli typ pliku jest skojarzony z aplikacją, przypisz identyfikator AppUserModelID w identyfikatorze progID pliku rejestracji. Jeśli pojedynczy plik wykonywalny jest uruchamiany w różnych trybach, które wydają się użytkownikowi jako odrębne aplikacje, dla każdego trybu wymagany jest oddzielny identyfikator AppUserModelID. W takim przypadku musi istnieć wiele rejestracji progID dla typu pliku, z których każdy ma inny identyfikator AppUserModelID.
- Jeśli istnieje wiele lokalizacji skrótów, z których użytkownik może uruchomić aplikację (w menu Start, na pulpicie lub w innym miejscu), pobierz magazyn właściwości skrótu, aby zastosować jeden identyfikator AppUserModelID do wszystkich skrótów jako właściwości skrótów.
- Gdy jawne wywołanie jest wykonywane w celu shAddToRecentDocs przez aplikację, użyj identyfikatora AppUserModelID w wywołaniu. Gdy typowe okno dialogowe pliku jest używane do otwierania lub zapisywania plików, SHAddToRecentDocs jest wywoływany przez okno dialogowe w imieniu aplikacji. To wywołanie może wywnioskować jawny identyfikator AppUserModelID z procesu. Jeśli jednak jawny identyfikator AppUserModelID jest stosowany jako właściwość okna, wspólne okno dialogowe pliku nie może określić poprawnego identyfikatora AppUserModelID. W takim przypadku aplikacja musi jawnie wywołać SHAddToRecentDocs i podać jej prawidłowy identyfikator AppUserModelID. Ponadto aplikacja musi uniemożliwić wywoływanie shAddToRecentDocs w jego imieniu przez ustawienie flagi FOS_DONTADDTORECENT w metodzie GetOptions metody IFileOpenDialog lub IFileSaveDialog.
Rejestrowanie aplikacji jako procesu hosta
Aplikacja może ustawić wpis rejestru IsHostApp, aby spowodować, że proces tego pliku wykonywalnego zostanie uznany za proces hosta przez pasek zadań. Ma to wpływ na grupowanie i domyślne wpisy listy skoków.
W poniższym przykładzie przedstawiono wymagany wpis rejestru. Należy pamiętać, że wpis nie jest przypisany do wartości; jego obecność to wszystko, co jest wymagane. Jest to wartość REG_NULL.
HKEY_CLASSES_ROOT
Applications
example.exe
IsHostApp
Jeśli sam proces lub plik skrótu używany do uruchamiania procesu ma jawny identyfikator AppUserModelID, lista procesów hosta jest ignorowana, a aplikacja jest traktowana jako normalna aplikacja przez pasek zadań. Uruchomione okna aplikacji są grupowane razem pod jednym przyciskiem paska zadań, a aplikacja może zostać przypięta do paska zadań.
Jeśli znana jest tylko nazwa pliku wykonywalnego uruchomionego procesu bez jawnego identyfikatora AppUserModelID, a plik wykonywalny znajduje się na liście procesów hosta, każde wystąpienie procesu jest traktowane jako oddzielna jednostka grupowania na pasku zadań. Przycisk paska zadań skojarzony z żadnym konkretnym wystąpieniem procesu nie wyświetla opcji przypinania/odpinania ani ikony uruchamiania dla nowego wystąpienia procesu. Proces nie kwalifikuje się również do dołączania do listy najczęściej używanych (MFU) menu Start . Jeśli jednak proces został uruchomiony za pomocą skrótu zawierającego argumenty uruchamiania (zazwyczaj docelowa zawartość do hostowania jako "aplikacja"), system może określić tożsamość, a aplikacja może zostać przypięta i ponownie uruchomiona.
Listy wykluczeń dla przypinania paska zadań i ostatnich/częstych list
Aplikacje, procesy i okna mogą sprawić, że będą niedostępne do przypinania do paska zadań lub do dołączenia do listy MFU menu Start. Istnieją trzy mechanizmy, które należy wykonać w tym celu:
Dodaj wpis NoStartPage do rejestracji aplikacji, jak pokazano poniżej:
HKEY_CLASSES_ROOT Applications Example.exe NoStartPage
Dane skojarzone z wpisem NoStartPage są ignorowane. Wymagana jest tylko obecność wpisu. W związku z tym idealny typ noStartPage jest REG_NONE.
Należy pamiętać, że dowolne użycie jawnego identyfikatora AppUserModelID zastępuje wpis NoStartPage. Jeśli jawny identyfikator AppUserModelID jest stosowany do skrótu, procesu lub okna, staje się on przypięty i kwalifikuje się do listy MFU menu Start .
Ustaw właściwość System.AppUserModel.PreventPinning w oknach i skrótach. Tę właściwość należy ustawić w oknie przed właściwością PKEY_AppUserModel_ID.
Dodaj jawny identyfikator AppUserModelID jako wartość w następującym podkluczu rejestru, jak pokazano poniżej:
HKEY_LOCAL_MACHINE Software Microsoft Windows CurrentVersion Explorer FileAssociation NoStartPageAppUserModelIDs AppUserModelID1 AppUserModelID2 AppUserModelID3
Każdy wpis jest wartością REG_NULL o nazwie AppUserModelID. Każdy identyfikator AppUserModelID znaleziony na tej liście nie jest przypięty i nie kwalifikuje się do dołączenia do listy MFU menu startowego .
Należy pamiętać, że niektóre pliki wykonywalne, a także skróty zawierające określone ciągi w ich nazwie, są automatycznie wykluczane z przypinania i dołączania do listy MFU.
Nuta
To automatyczne wykluczenie może zostać zastąpione przez zastosowanie jawnego identyfikatora AppUserModelID.
Jeśli którykolwiek z następujących ciągów, niezależnie od wielkości liter, są uwzględnione w nazwie skrótu, program nie jest przypięty i nie jest wyświetlany na liście najczęściej używanych (nie dotyczy systemu Windows 10):
- Dokumentacja
- Pomoc
- Instalować
- Więcej informacji
- Przeczytaj mnie
- Przeczytaj najpierw
- Readme
- Usunąć
- Instalacji
- Wsparcie
- Co nowego
Poniższa lista programów nie można przypiąć i jest wykluczona z najczęściej używanej listy.
- 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
Powyższe listy są przechowywane w następujących wartościach rejestru.
Nuta
Te listy nie powinny być modyfikowane przez aplikacje. Użyj jednej z metod listy wykluczeń wymienionych wcześniej dla tego samego środowiska.
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows
CurrentVersion
Explorer
FileAssociation
AddRemoveApps
HostApps
Tematy pokrewne