Fungsi PackageIdFromFullName (appmodel.h)

Mendapatkan pengidentifikasi paket (ID) untuk nama lengkap paket yang ditentukan.

Sintaks

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

Parameter

[in] packageFullName

Jenis: PCWSTR

Nama lengkap paket.

[in] flags

Jenis: const UINT32

Konstanta paket yang menentukan bagaimana informasi paket diambil. Bendera PACKAGE_INFORMATION_* didukung.

[in, out] bufferLength

Jenis: UINT32*

Pada input, ukuran buffer, dalam byte. Pada output, ukuran data yang dikembalikan, dalam byte.

[out, optional] buffer

Jenis: BYTE*

ID paket, direpresentasikan sebagai struktur PACKAGE_ID .

Nilai kembali

Jenis: LONG

Jika fungsi berhasil, fungsi akan mengembalikan ERROR_SUCCESS. Jika tidak, fungsi mengembalikan kode kesalahan. Kode kesalahan yang mungkin mencakup yang berikut ini.

Menampilkan kode Deskripsi
ERROR_INSUFFICIENT_BUFFER
Buffer tidak cukup besar untuk menyimpan data. Ukuran yang diperlukan ditentukan oleh bufferLength.
ERROR_NOT_FOUND
Paket tidak diinstal untuk pengguna.

Keterangan

Jika bendera menentukan PACKAGE_INFORMATION_BASIC, bidang berikut diambil:

  • nama
  • processorArchitecture
  • publisherId
  • resourceId
  • versi
Jika bendera menentukan PACKAGE_INFORMATION_FULL, bidang berikut diambil:
  • nama
  • processorArchitecture
  • penerbit
  • publisherId
  • resourceId
  • versi
Permintaan untuk PACKAGE_INFORMATION_FULL berhasil hanya jika paket yang sesuai dengan packageFullName diinstal untuk dan dapat diakses oleh pengguna saat ini. Jika nama lengkap paket secara sintaksis benar tetapi tidak sesuai dengan paket yang diinstal untuk dan dapat diakses oleh pengguna saat ini, fungsi mengembalikan ERROR_NOT_FOUND.

Untuk informasi tentang batas ukuran string, lihat Konstanta identitas.

Contoh

#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);
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 8 [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2012 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header appmodel.h
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

GetCurrentPackageId

GetPackageId

PackageFamilyNameFromFullName

PackageFamilyNameFromId

PackageFullNameFromId

PackageNameAndPublisherIdFromFamilyName