winapi — определяет, работает ли приложение C ++ как приложение UWP с поддержкой предыдущих версий.

Моей первой мыслью было использовать GetPackageFamilyName() и искать ERROR_SUCCESS против APPMODEL_ERROR_NO_PACKAGE,

Но мне нужно поддерживать Windows 7, которая делает GetPackageFamilyName() непригодным для использования.

Есть ли достойный альтернативный метод? Что-нибудь в реестре, возможно?

1

Решение

использование GetProcAddress() загрузить GetPackageFamilyName() динамически во время выполнения, например:

typedef LONG WINAPI (*LPFN_GPFN)(HANDLE, UINT32*, PWSTR);
bool bIsUWP = false;

LPFN_GPFN lpGetPackageFamilyName = (LPFN_GPFN) GetProcAddress(GetModuleHandle(TEXT("kernel32")), "GetPackageFamilyName");
if (lpGetPackageFamilyName)
{
UINT32 size = 0;
if (lpGetPackageFamilyName(GetCurrentProcess(), &size, NULL) == ERROR_INSUFFICIENT_BUFFER)
bIsUWP = true;
}

if (bIsUWP)
{
//...
}
else
{
//...
}

В качестве альтернативы рассмотрите возможность использования одного из GetCurentPackage...() функции (GetCurrentPackageFamilyName(), GetCurrentPackageId(), GetCurrentPackageInfo(), и т. д.) вместо использования GetPackageFamilyName() с HANDLE в процессе вызова.

5

Другие решения

GetPackageFamilyName — правильный путь. Для поддержки Windows 7 вы можете сначала проверить, работаете ли вы на Win7. Если да, то вы знаете, что не упакованы. Только если у вас версия> 7, вы вызываете GetPackageFamilyName, чтобы проверить, упакованы ли вы.

2

Вот статья от Microsoft с примером, который также должен поддерживать Windows 7.

Desktop Bridge — определите контекст приложения

0
По вопросам рекламы [email protected]