Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan integrálhatók a csomagolatlan alkalmazások a Windows Share szolgáltatással. A Megosztás funkció lehetővé teszi, hogy a felhasználók tartalmat osszanak meg az egyik Windows-alkalmazásból a másikba. A csomagolatlan alkalmazásokat csomagidentitással kell ellátni, hogy share-célként regisztrálhassa magát. A regisztrációt követően az alkalmazás fogadhat és feldolgozhat megosztott fájlokat.
Csomagolatlan alkalmazás integrálása megosztási célként:
- Az alkalmazás csomagazonosítójának megadása
- A megosztási szerződés megvalósítása
Csomagolatlan alkalmazások biztosítása csomagidentitással
Az alkalmazások kétféleképpen szerezhetik be a csomagdentitást:
- Új MSIX telepítési csomag létrehozása (előnyben részesített módszer) VAGY
- Kompatibilissé teheti a külső hellyel rendelkező alkalmazásokat az aktuális telepítővel. Ez csak olyan alkalmazások esetében ajánlott, amelyek már rendelkeznek telepítőprogramokkal, és amelyek nem tudnak MSIX-telepítésre váltani.
Új MSIX telepítési csomag létrehozása
Javasoljuk, hogy a Visual Studióban a Windows Application Packaging Project sablonnal csomagolja be az alkalmazást az MSIX-hez. Ez magában foglalja az MSIX-csomagban található összes bináris fájlt, és tiszta és megbízható telepítési élményt biztosít.
Teendők az asztali alkalmazások csomagolása előtt: Felkészülés asztali alkalmazások (MSIX) csomagolására.
Kövesse az asztali alkalmazás MSIX-csomagoláshoz való beállítását a Visual Studióban a meglévő alkalmazás projektjéhez tartozó csomag létrehozásához.
Megjegyzés:
A csomagolási projekt létrehozásakor válassza a Windows 10 2004-es verzióját (10.0; Build 19041) vagy újabb, mint a minimális verzió.
Ha ez befejeződött, hozza létre a csomagot a Visual Studióban az 'asztali vagy UWP-alkalmazás csomagolása' útmutatót követve.
A külső hellyel rendelkező csomagolás kompatibilissé tétele az aktuális telepítővel
Az alkalmazáscsomag identitásának második módja, ha külső hellyel rendelkező csomagot ad hozzá az alkalmazáshoz, és regisztrálja azt a meglévő telepítőben. A külső hellyel rendelkező csomag egy üres MSIX-csomag, amely tartalmazza az identitással, a megosztási célregisztrációval és a vizualizációs eszközökkel rendelkező .appxmanifestet. Az alkalmazás bináris fájljait továbbra is az alkalmazás meglévő telepítője kezeli. A csomag regisztrálásakor meg kell adnia az alkalmazás telepítési helyét az API-ban. Fontos, hogy az identitás az MSIX-csomagjegyzékben és a Win32-alkalmazásjegyzékben szinkronban maradjon az alkalmazás aláírásához használt tanúsítvánnyal.
A csomagolatlan alkalmazások csomagidentitásának megadásának lépései
A külső hellyel rendelkező csomagok létrehozásának dokumentációja itt érhető el, beleértve a használandó sablonokkal kapcsolatos információkat is: A csomag identitásának biztosítása külső hellyel rendelkező csomagolással.
A teljes mintaalkalmazás a GitHubon érhető el: Külső helyen csomagolva.
Regisztrálás megosztási célállomásként
Ha az alkalmazás rendelkezik csomagadentitással, a következő lépés a megosztási szerződés megvalósítása. A megosztási szerződés lehetővé teszi, hogy az alkalmazás adatokat fogadjon egy másik alkalmazástól.
A Share Sheetbe integrálandó csomagolt alkalmazások dokumentációjának Share Target szakaszában ugyanazokat a lépéseket követheti.
A PhotoStore-mintaalkalmazás bemutatása
Ebben a csomagdentitásról, regisztrációról és megosztási aktiválásról szóló útmutatóban a csomagolatlan Win32-alkalmazások esetében megtanulhatja, hogyan adhat csomagidentitást egy kicsomagolt Win32-alkalmazásnak egy külső hellyel rendelkező csomag létrehozásával. Miután az alkalmazás rendelkezik csomagidentitással, regisztrálhatja és kezelheti az aktiválást megosztási célként. A PhotoStoreDemo mintával a következő lépéseket kell elvégeznie:
- A
AppxManifest.xml
fájl létrehozása - Csomag létrehozása
- A csomag aláírása
- A csomag regisztrálása
- Alkalmazásaktiválás kezelése
Először hozza létre a AppxManifest.xml
fájlt, amely tartalmazza a szükséges tulajdonságokat, például <AllowExternalContent>
, az identitást, a képességeket, valamint a megosztás céljához szükséges kiterjesztést. Győződjön meg arról, hogy a Publisher
PackageName
fájlban lévő & ApplicationId
AppxManifest.xml
értékek megegyeznek a PhotoStoreDemo.exe.manifest
fájlban lévő értékekkel. Az Publisher
értéknek meg kell egyeznie a csomag aláírásához használt tanúsítvány értékével is. Szükség szerint adjon hozzá vizuális elemeket, ahogy az AppxManifest.xml
hivatkozva van. A Visual Studióban a Visual Assets csomópontot használhatja az Application Packaging projektben végzett szerkesztéskor package.manifest
a szükséges vizualizáció-objektumok létrehozásához.
Ez egy mintatöredék AppxManifest.xml
, amely engedélyezett külső tartalommal:
<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>
...
Ez egy minta Application.exe.manifest fájl:
<?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>
Ezután a külső hellyel rendelkező csomag létrehozásához használja az MakeAppx.exe
eszközt a /nv
paranccsal a fájlt tartalmazó AppxManifest.xml
csomag létrehozásához.
Példa:
MakeAppx.exe pack /d <Path to directory with AppxManifest.xml> /p <Output Path>\mypackage.msix /nv
Megjegyzés:
A külső hellyel rendelkező csomagok csomagjegyzéket tartalmaznak, de más alkalmazás bináris fájljait és tartalmát nem. A külső hellyel rendelkező csomagok jegyzékfájljai előre meghatározott külső helyen hivatkozhatnak a csomagon kívüli fájlokra.
Írja alá a csomagot megbízható tanúsítvánnyal a SignTool.exe
használatával.
Példa:
SignTool.exe sign /fd SHA256 /a /f <path to cert> /p <cert key> <Path to Package>
A csomag aláírásához használt tanúsítványt a számítógépen megbízható helyen kell telepíteni.
Az alkalmazás első futtatásakor regisztrálja a csomagot a Windowsban. Ha egy alkalmazásnak megvan a saját telepítője, az aláírt MSIX-et is tartalmaznia kell hasznos adatként, és egy megadott helyre kell elhelyeznie (például az alkalmazás telepítési helyére). Ezt a helyet futásidőben ismernie kell az alkalmazásnak, mert az alkalmazásnak az MSIX abszolút elérési útjára lesz szüksége a regisztrációhoz. Helyezze el az eszközöket és resources.pri
az alkalmazás telepítési helyére is.
Az alábbi kód egy példa az alkalmazás fő metódusának csomagolatlan végrehajtására:
[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);
}
}
...
Ez a példa bemutatja, hogyan regisztrálhatja az MSIX-et az alkalmazás első futtatásakor:
[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);
}
}
...
Végül kezelje az alkalmazás aktiválását:
[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);
}
}
Csomagidentitással rendelkező Windows-megosztás bemutató
Az alábbi videó bemutatja, hogyan lehet egy csomagolatlan alkalmazás megosztási célként a csomag identitásának megadása és a megosztási célként való regisztráció után:
Lásd még
- Windows App SDK üzembe helyezésének áttekintése
- Az első WinUI 3-projekt létrehozása
- UWP-ről a Windows App SDK-re történő migrálás
- Az alkalmazások csomagolásának előnyei és hátrányai – Üzembe helyezés áttekintése
- Nem csomagolt Win32-alkalmazások identitása, regisztrációja és aktiválása
- A WinAppSDK-alkalmazás szerződés-implementációjának megosztása
- Megosztási szerződés implementációja külső helyen csomagolt alkalmazásokhoz
Windows developer