Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule wyjaśniono, jak zintegrować nieopakowane aplikacje z funkcją udostępniania Windows. Funkcja Udostępnianie umożliwia użytkownikom udostępnianie zawartości z jednej aplikacji systemu Windows do innej. Aplikacja bez pakietu musi być wyposażona w tożsamość pakietu, aby mogła się zarejestrować jako docelowy punkt udostępniania. Po zarejestrowaniu aplikacja może odbierać i przetwarzać pliki udostępnione.
Jak dołączyć rozpakowaną aplikację, jako cel udostępniania:
- Nadaj aplikacji tożsamość pakietu
- Implementowanie kontraktu udostępniania
Zapewnianie rozpakowanym aplikacjom tożsamości pakietu
Aplikacja może uzyskać tożsamość pakietu na dwa sposoby:
- Utwórz nowy pakiet instalacyjny MSIX (preferowana metoda) LUB
- Upewnij się, że aplikacje pakowane z zewnętrzną lokalizacją są zgodne z bieżącym instalatorem. Jest to zalecane tylko w przypadku aplikacji, które mają istniejącego instalatora i które nie mogą przełączyć się na instalację MSIX.
Tworzenie nowego pakietu instalacyjnego MSIX
Zaleca się spakowanie aplikacji przy użyciu pliku MSIX przy użyciu szablonu Projektu pakietu aplikacji systemu Windows w programie Visual Studio. Obejmuje to wszystkie pliki binarne w pakiecie MSIX i zapewniają czyste i zaufane środowisko instalacji.
Kwestie do zanotowania przed pakowaniem aplikacji klasycznych: przygotowanie do spakowania aplikacji klasycznej (MSIX).
Wykonaj kroki opisane w temacie Konfigurowanie aplikacji klasycznej na potrzeby tworzenia pakietów MSIX w programie Visual Studio, aby wygenerować pakiet dla projektu istniejącej aplikacji.
Uwaga / Notatka
Podczas tworzenia projektu tworzenia pakietów wybierz pozycję Windows 10, wersja 2004 (10.0; Kompilacja 19041) lub nowsza jako minimalna wersja.
Po zakończeniu utworzysz pakiet, postępując zgodnie z instrukcją Jak opakować aplikację desktopową lub UWP w Visual Studio.
Spraw, aby pakietowanie z zewnętrzną lokalizacją było zgodne z bieżącym instalatorem
Drugim sposobem na nadanie tożsamości pakietu aplikacji jest dodanie pakietu z lokalizacją zewnętrzną do aplikacji i zarejestrowanie go w istniejącym instalatorze. Pakiet z lokalizacją zewnętrzną jest pustym pakietem MSIX zawierającym plik .appxmanifest zawierający tożsamość, rejestrację celu udostępniania i zasoby wizualne. Pliki binarne aplikacji są nadal zarządzane przez istniejącego instalatora aplikacji. Podczas rejestrowania pakietu należy podać lokalizację instalacji aplikacji w interfejsie API. Ważne jest, aby tożsamość w manifeście pakietu MSIX i manifeście aplikacji Win32 była zgodna z certyfikatem używanym do podpisywania aplikacji.
Kroki nadawania tożsamości pakietu nieopakowanej aplikacji
Dokumentacja dotycząca tworzenia pakietu z lokalizacją zewnętrzną jest dostępna tutaj, w tym informacje na temat szablonów do użycia: Udzielanie tożsamości pakietu przez pakowanie z lokalizacją zewnętrzną.
Pełna wersja aplikacji przykładowej jest dostępna na GitHub: Zewnętrzna lokalizacja pakietu.
Zarejestruj się jako cel udostępniania
Gdy aplikacja ma tożsamość pakietu, następnym krokiem jest zaimplementowanie kontraktu udostępniania. Kontrakt udostępniania umożliwia aplikacji odbieranie danych z innej aplikacji.
Te same kroki można wykonać w sekcji Rejestrowanie jako element docelowy udostępniania w dokumentacji dla spakowanych aplikacji w celu integracji z Udostępnij arkusz.
Przewodnik po przykładowej aplikacji PhotoStore
W tym przewodniku po tożsamości pakietu, rejestracji i aktywacji udziału dla rozpakowanych aplikacji Win32 dowiesz się, jak udzielić tożsamości pakietu do rozpakowanej aplikacji Win32, tworząc pakiet z lokalizacją zewnętrzną. Gdy aplikacja ma tożsamość pakietu, może zarejestrować i obsłużyć aktywację jako cel udostępniania. Wykonasz następujące kroki, korzystając z przykładu PhotoStoreDemo:
- Generowanie
AppxManifest.xmlpliku - Tworzenie pakietu
- Podpisywanie pakietu
- Rejestrowanie pakietu
- Obsługa aktywacji aplikacji
Zacznij od utworzenia pliku AppxManifest.xml, który zawiera niezbędne właściwości, takie jak <AllowExternalContent>, tożsamość, możliwości, oraz rozszerzenie docelowego obiektu udziału. Upewnij się, że wartości Publisher, PackageName i ApplicationId w pliku AppxManifest.xml odpowiadają wartościom w pliku PhotoStoreDemo.exe.manifest. Wartość Publisher powinna również odpowiadać wartości w certyfikacie użytym do podpisania pakietu. Dodaj zasoby wizualne zgodnie z wymaganiami i odniesieniami w AppxManifest.xml. W programie Visual Studio możesz użyć węzła Zasoby wizualne podczas edytowania package.manifest w projekcie Tworzenie pakietów aplikacji, aby wygenerować wymagane zasoby wizualne.
Jest to przykładowy AppxManifest.xml fragment kodu z dozwoloną zawartością zewnętrzną:
<Identity Name="PhotoStoreDemo" ProcessorArchitecture="neutral" Publisher="CN=YourPubNameHere" Version="1.0.0.0" />
<Properties>
<DisplayName>PhotoStoreDemo</DisplayName>
<PublisherDisplayName>Sparse Package</PublisherDisplayName>
<Logo>Assets\storelogo.png</Logo>
<uap10:AllowExternalContent>true</uap10:AllowExternalContent>
</Properties>
<Resources>
<Resource Language="en-us" />
</Resources>
<Dependencies>
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.19041.0" MaxVersionTested="10.0.19041.0" />
</Dependencies>
<Capabilities>
<rescap:Capability Name="runFullTrust" />
<rescap:Capability Name="unvirtualizedResources"/>
</Capabilities>
<Applications>
<Application Id="PhotoStoreDemo" Executable="PhotoStoreDemo.exe" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="win32App">
<uap:VisualElements AppListEntry="none" DisplayName="PhotoStoreDemo" Description="PhotoStoreDemo" BackgroundColor="transparent" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" Square310x310Logo="Assets\LargeTile.png" Square71x71Logo="Assets\SmallTile.png"></uap:DefaultTile>
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<uap:Extension Category="windows.shareTarget">
<uap:ShareTarget Description="Send to PhotoStoreDemo">
<uap:SupportedFileTypes>
<uap:FileType>.jpg</uap:FileType>
<uap:FileType>.png</uap:FileType>
<uap:FileType>.gif</uap:FileType>
</uap:SupportedFileTypes>
<uap:DataFormat>StorageItems</uap:DataFormat>
<uap:DataFormat>Bitmap</uap:DataFormat>
</uap:ShareTarget>
</uap:Extension>
...
Jest to przykładowy plik manifestu Application.exe:
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="PhotoStoreDemo.app"/>
<msix xmlns="urn:schemas-microsoft-com:msix.v1"
publisher="CN=YourPubNameHere"
packageName="PhotoStoreDemo"
applicationId="PhotoStoreDemo"
/>
</assembly>
Następnie, aby utworzyć pakiet z lokalizacją zewnętrzną, użyj narzędzia MakeAppx.exe wraz z poleceniem /nv aby utworzyć pakiet, który zawiera plik AppxManifest.xml.
Przykład:
MakeAppx.exe pack /d <Path to directory with AppxManifest.xml> /p <Output Path>\mypackage.msix /nv
Uwaga / Notatka
Pakiet z lokalizacją zewnętrzną zawiera manifest pakietu, ale nie ma innych plików binarnych aplikacji i zawartości. Manifest pakietu z lokalizacją zewnętrzną może odwoływać się do plików spoza pakietu w wstępnie określonej lokalizacji zewnętrznej.
Podpisz swój pakiet za pomocą zaufanego certyfikatu, korzystając z SignTool.exe.
Przykład:
SignTool.exe sign /fd SHA256 /a /f <path to cert> /p <cert key> <Path to Package>
Certyfikat używany do podpisywania pakietu powinien być zainstalowany w zaufanej lokalizacji na maszynie.
Po pierwszym uruchomieniu aplikacji zarejestruj pakiet w systemie Windows. Jeśli aplikacja ma własny instalator, powinna również zawierać podpisany plik MSIX jako ładunek i powinien umieścić go w określonej lokalizacji (na przykład lokalizacji instalacji aplikacji). Ta lokalizacja musi być znana aplikacji w czasie wykonywania, ponieważ aplikacja będzie potrzebować bezwzględnej ścieżki MSIX do jej zarejestrowania. Umieść zasoby i resources.pri w lokalizacji instalacji aplikacji.
Poniższy kod jest przykładem rozpakowanego uruchomienia metody Main aplikacji.
[STAThread]
public static void Main(string[] cmdArgs)
{
//if app isn't running with identity, register its package with external identity
if (!ExecutionMode.IsRunningWithIdentity())
{
//TODO - update the value of externalLocation to match the output location of your VS Build binaries and the value of
//externalPkgPath to match the path to your signed package with external identity (.msix).
//Note that these values cannot be relative paths and must be complete paths
string externalLocation = Environment.CurrentDirectory;
string externalPkgPath = externalLocation + @"\PhotoStoreDemo.package.msix";
//Attempt registration
bool bPackageRegistered = false;
//bPackageRegistered = registerPackageWithExternalLocation(externalLocation, externalPkgPath);
if (bPackageRegistered)
{
//Registration succeeded, restart the app to run with identity
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location, arguments: cmdArgs?.ToString());
}
else //Registration failed, run without identity
{
Debug.WriteLine("Package Registration failed, running WITHOUT Identity");
SingleInstanceManager wrapper = new SingleInstanceManager();
wrapper.Run(cmdArgs);
}
}
...
W tym przykładzie pokazano, jak zarejestrować plik MSIX podczas pierwszego uruchomienia aplikacji:
[STAThread]
public static void Main(string[] cmdArgs)
{
//If app isn't running with identity, register its package with external identity
if (!ExecutionMode.IsRunningWithIdentity())
{
//TODO - update the value of externalLocation to match the output location of your VS Build binaries and the value of
//externalPkgPath to match the path to your signed package with external identity (.msix).
//Note that these values cannot be relative paths and must be complete paths
string externalLocation = Environment.CurrentDirectory;
string externalPkgPath = externalLocation + @"\PhotoStoreDemo.package.msix";
//Attempt registration
if (registerPackageWithExternalLocation(externalLocation, externalPkgPath))
{
//Registration succeeded, restart the app to run with identity
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location, arguments: cmdArgs?.ToString());
}
else //Registration failed, run without identity
{
Debug.WriteLine("Package Registration failed, running WITHOUT Identity");
SingleInstanceManager wrapper = new SingleInstanceManager();
wrapper.Run(cmdArgs);
}
}
...
Na koniec obsłuż aktywację aplikacji:
[STAThread]
public static void Main(string[] cmdArgs)
{
//if app isn't running with identity, register its sparse package
if (!ExecutionMode.IsRunningWithIdentity())
{
...
}
else //App is registered and running with identity, handle launch and activation
{
//Handle Sparse Package based activation e.g Share target activation or clicking on a Tile
// Launching the .exe directly will have activationArgs == null
var activationArgs = AppInstance.GetActivatedEventArgs();
if (activationArgs != null)
{
switch (activationArgs.Kind)
{
case ActivationKind.Launch:
HandleLaunch(activationArgs as LaunchActivatedEventArgs);
break;
case ActivationKind.ToastNotification:
HandleToastNotification(activationArgs as ToastNotificationActivatedEventArgs);
break;
case ActivationKind.ShareTarget: // Handle the activation as a share target
HandleShareAsync(activationArgs as ShareTargetActivatedEventArgs);
break;
default:
HandleLaunch(null);
break;
}
}
//This is a direct exe based launch e.g. double click app .exe or desktop shortcut pointing to .exe
else
{
SingleInstanceManager singleInstanceManager = new SingleInstanceManager();
singleInstanceManager.Run(cmdArgs);
}
}
Pokaz tożsamości pakietu w usłudze Windows Share
W poniższym filmie wideo pokazano, jak aplikacja bez pakietu może być celem udostępniania po uzyskaniu tożsamości pakietu i zarejestrowaniu się jako cel udostępniania.
Zobacz także
- Omówienie wdrażania zestawu SDK aplikacji systemu Windows
- Tworzenie pierwszego projektu WinUI 3
- migracja z platformy UWP do zestawu SDK aplikacji systemu Windows
- Zalety i wady tworzenia pakietów aplikacji — omówienie wdrażania
- Tożsamość, rejestracja i aktywacja niepakowanych aplikacji Win32
- Implementacja kontraktu udostępniania dla zestawu SDK aplikacji systemu Windows
- Współdzielenie implementacji kontraktu dla aplikacji pakowanych z lokalizacją zewnętrzną
Windows developer