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


Csomagolatlan alkalmazások integrálása a Windows Share szolgáltatással

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 PublisherPackageName fájlban lévő & ApplicationIdAppxManifest.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