PackageFullNameFromId, fonction (appmodel.h)
Obtient le nom complet du package pour l’identificateur de package (ID) spécifié.
Syntaxe
LONG PackageFullNameFromId(
[in] const PACKAGE_ID *packageId,
[in, out] UINT32 *packageFullNameLength,
[out, optional] PWSTR packageFullName
);
Paramètres
[in] packageId
Type : const PACKAGE_ID*
ID du package.
[in, out] packageFullNameLength
Type : UINT32*
En entrée, la taille de la mémoire tampon packageFullName , en caractères. Lors de la sortie, la taille du nom complet du package a été renvoyée, en caractères, y compris la fin null.
[out, optional] packageFullName
Type : PWSTR
Nom complet du package.
Valeur retournée
Type : LONG
Si la fonction réussit, elle retourne ERROR_SUCCESS. Sinon, la fonction retourne un code d’erreur. Les codes d’erreur possibles sont les suivants.
Code de retour | Description |
---|---|
|
La mémoire tampon n’est pas assez grande pour contenir les données. La taille requise est spécifiée par packageFullNameLength. |
Remarques
Pour plus d’informations sur les limites de taille de chaîne, consultez Constantes d’identité.
Exemples
#define _UNICODE 1
#define UNICODE 1
#include <Windows.h>
#include <appmodel.h>
#include <malloc.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
int ShowUsage();
bool ParseArchitecture(__in PCWSTR architectureString, __out UINT32 * architecture);
bool ParseVersion(__in PCWSTR versionString, __out PACKAGE_VERSION * version);
int ShowUsage()
{
wprintf(L"Usage: PackageFullNameFromId <name><version> <arch> <resourceid> <publisher>\n");
return 1;
}
int __cdecl wmain(__in int argc, __in_ecount(argc) WCHAR * argv[])
{
if (argc <= 5)
return ShowUsage();
PACKAGE_ID packageId;
ZeroMemory(&packageId, sizeof(packageId));
packageId.name = argv[1];
if (!ParseVersion(argv[2], &packageId.version))
return 2;
if (!ParseArchitecture(argv[3], &packageId.processorArchitecture))
return 3;
packageId.resourceId = argv[4];
packageId.publisher = argv[5];
UINT32 length = 0;
LONG rc = PackageFullNameFromId(&packageId, &length, NULL);
if (rc == ERROR_SUCCESS)
{
wprintf(L"PackageFullNameFromId unexpectedly succeeded\n");
return 4;
}
else if (rc != ERROR_INSUFFICIENT_BUFFER)
{
wprintf(L"Error %d in PackageFullNameFromId\n", rc);
return 5;
}
PWSTR fullName = (PWSTR) malloc(length * sizeof(WCHAR));
if (fullName == NULL)
{
wprintf(L"Error allocating memory\n");
return 6;
}
rc = PackageFullNameFromId(&packageId, &length, fullName);
if (rc != ERROR_SUCCESS)
wprintf(L"Error %d converting Package Id to Full Name\n", rc);
else
wprintf(L"Package Full Name = %s\n", fullName);
free(fullName);
return rc == ERROR_SUCCESS ? 0 : 7;
}
bool ParseArchitecture(__in PCWSTR architectureString, __out UINT32 * architecture)
{
if (_wcsicmp(architectureString, L"neutral") == 0)
*architecture = PROCESSOR_ARCHITECTURE_NEUTRAL;
else if (_wcsicmp(architectureString, L"x86") == 0)
*architecture = PROCESSOR_ARCHITECTURE_INTEL;
else if (_wcsicmp(architectureString, L"x64") == 0)
*architecture = PROCESSOR_ARCHITECTURE_AMD64;
else if (_wcsicmp(architectureString, L"arm") == 0)
*architecture = PROCESSOR_ARCHITECTURE_ARM;
else
{
wprintf(L"Invalid architecture\n");
return false;
}
return true;
}
bool ParseVersion(__in PCWSTR versionString, __out PACKAGE_VERSION * version)
{
PWSTR s = (PWSTR) versionString;
ULONG n = wcstoul(s, &s, 10);
if (((n == 0) || (n > 65535)) && (errno == ERANGE)) {
wprintf(L"Invalid Version (Major)\n");
return false;
}
version->Major = (USHORT) n;
if (*s != L'.')
{
wprintf(L"Invalid Version\n");
return false;
}
n = wcstoul(++s, &s, 10);
if (((n == 0) || (n > 65535)) && (errno == ERANGE)) {
wprintf(L"Invalid Version (Minor)\n");
return false;
}
version->Minor = (USHORT) n;
if (*s != L'.')
{
wprintf(L"Invalid Version\n");
return false;
}
n = wcstoul(++s, &s, 10);
if (((n == 0) || (n > 65535)) && (errno == ERANGE)) {
wprintf(L"Invalid Version (Build)\n");
return false;
}
version->Build = (USHORT) n;
if (*s != L'.')
{
wprintf(L"Invalid Version\n");
return false;
}
n = wcstoul(++s, &s, 10);
if (((n == 0) || (n > 65535)) && (errno == ERANGE)) {
wprintf(L"Invalid Version (Revision)\n");
return false;
}
version->Revision = (USHORT) n;
return true;
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 8 [applications de bureau | Applications UWP] |
Serveur minimal pris en charge | Windows Server 2012 [applications de bureau | Applications UWP] |
Plateforme cible | Windows |
En-tête | appmodel.h |
Bibliothèque | Kernel32.lib |
DLL | Kernel32.dll |
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour