PackageIdFromFullName-Funktion (appmodel.h)

Ruft den Paketbezeichner (ID) für den angegebenen vollständigen Paketnamen ab.

Syntax

LONG PackageIdFromFullName(
  [in]            PCWSTR       packageFullName,
  [in]            const UINT32 flags,
  [in, out]       UINT32       *bufferLength,
  [out, optional] BYTE         *buffer
);

Parameter

[in] packageFullName

Typ: PCWSTR

Der vollständige Name eines Pakets.

[in] flags

Typ: const UINT32

Die Paketkonstanten , die angeben, wie Paketinformationen abgerufen werden. Die PACKAGE_INFORMATION_* -Flags werden unterstützt.

[in, out] bufferLength

Typ: UINT32*

Bei der Eingabe die Größe des Puffers in Bytes. Bei der Ausgabe die Größe der zurückgegebenen Daten in Bytes.

[out, optional] buffer

Typ: BYTE*

Die Paket-ID, die als PACKAGE_ID-Struktur dargestellt wird.

Rückgabewert

Typ: LONG

Wenn die Funktion erfolgreich ist, gibt sie ERROR_SUCCESS zurück. Andernfalls gibt die Funktion einen Fehlercode zurück. Zu den möglichen Fehlercodes gehören die folgenden:

Rückgabecode Beschreibung
ERROR_INSUFFICIENT_BUFFER
Der Puffer ist nicht groß genug, um die Daten aufzunehmen. Die erforderliche Größe wird durch bufferLength angegeben.
ERROR_NOT_FOUND
Das Paket wird für den Benutzer nicht installiert.

Hinweise

Wenn FlagsPACKAGE_INFORMATION_BASIC angibt, werden die folgenden Felder abgerufen:

  • name
  • Processorarchitecture
  • publisherId
  • Ressourcen-ID
  • version
Wenn FlagsPACKAGE_INFORMATION_FULL angibt, werden die folgenden Felder abgerufen:
  • name
  • Processorarchitecture
  • publisher
  • publisherId
  • Ressourcen-ID
  • version
Eine Anforderung für PACKAGE_INFORMATION_FULL ist nur erfolgreich, wenn das Paket, das packageFullName entspricht, für den aktuellen Benutzer installiert ist und darauf zugreifen kann. Wenn der vollständige Paketname syntaktisch korrekt ist, aber nicht einem Paket entspricht, das für den aktuellen Benutzer installiert ist und auf das er zugreifen kann, gibt die Funktion ERROR_NOT_FOUND zurück.

Informationen zu Zeichenfolgengrößenbeschränkungen finden Sie unter Identitätskonstanten.

Beispiele

#define _UNICODE 1
#define UNICODE 1

#include <Windows.h>
#include <appmodel.h>
#include <malloc.h>
#include <stdio.h>

int ShowUsage();
void FullNameToId(__in PCWSTR fullName, __in const UINT32 flags);
void ShowPackageId(__in const PACKAGE_ID * packageId);

int ShowUsage()
{
    wprintf(L"Usage: PackageIdFromFullName <[flags]fullname> [<[flags]fullname>...]\n"
            L"flags:\n"
            L"    ? = Basic information (PACKAGE_INFORMATION_BASIC)\n"
            L"    * = Full information (PACKAGE_INFORMATION_FULL)\n"
            L"Default = Basic\n");
    return 1;
}

int __cdecl wmain(__in int argc, __in_ecount(argc) WCHAR * argv[])
{
    if (argc <= 1)
        return ShowUsage();

    for (int i=1; i<argc; ++i)
    {
        PCWSTR fullName = argv[i];
        UINT32 flags = PACKAGE_INFORMATION_BASIC;
        if (*fullName != L'\0')
        {
            if (*fullName == L'?')
            {
                flags = PACKAGE_INFORMATION_BASIC;
                ++fullName;
            }
            else if (*fullName == L'*')
            {
                flags = PACKAGE_INFORMATION_FULL;
                ++fullName;
            }
        }
        FullNameToId(fullName, flags);
    }

    return 0;
}

void FullNameToId(__in PCWSTR fullName, __in const UINT32 flags)
{
    wprintf(L"FullName: %s%s\n", fullName, ((flags & PACKAGE_INFORMATION_FULL) == 0 ? L"  [BASIC]" : L"  [FULL]"));
    UINT32 length = 0;
    LONG rc = PackageIdFromFullName(fullName, flags, &length, NULL);
    if (rc == ERROR_SUCCESS)
    {
        wprintf(L"PackageIdFromFullName unexpected succeeded\n");
        return;
    }
    else if (rc != ERROR_INSUFFICIENT_BUFFER)
    {
        wprintf(L"Error %d in PackageIdFromFullName\n", rc);
        return;
    }

    BYTE * buffer = (PBYTE) malloc(length);
    if (buffer == NULL)
    {
        wprintf(L"Error allocating memory\n");
        return;
    }

    rc = PackageIdFromFullName(fullName, flags, &length, buffer);
    if (rc != ERROR_SUCCESS)
        wprintf(L"Error %d converting Package Full Name to Id\n", rc);
    else
    {
        ShowPackageId((PACKAGE_ID *) buffer);
    }

    free(buffer);
}

void ShowPackageId(__in const PACKAGE_ID * packageId)
{
    wprintf(L"    Name        : %s\n", packageId->name);
    if (packageId->publisher != NULL)
        wprintf(L"    Publisher   : %s\n", packageId->publisher);
    if (packageId->publisherId != NULL)
        wprintf(L"    PublisherId : %s\n", packageId->publisherId);
    wprintf(L"    Version     : %hu.%hu.%hu.%hu\n",
            packageId->version.Major,
            packageId->version.Minor,
            packageId->version.Build,
            packageId->version.Revision);
    wprintf(L"    Architecture: %u\n", packageId->processorArchitecture);
    if (packageId->resourceId != NULL)
        wprintf(L"    Resource    : %s\n", packageId->resourceId);
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8 [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile appmodel.h
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

GetCurrentPackageId

GetPackageId

PackageFamilyNameFromFullName

PackageFamilyNameFromId-Funktion (appmodel.h)

PackageFullNameFromId

PackageNameAndPublisherIdFromFamilyName-Funktion (appmodel.h)