我的第一个想法是使用GetPackageFamilyName()并查找ERROR_SUCCESSAPPMODEL_ERROR_NO_PACKAGE

但是,我需要支持Windows 7,这使得GetPackageFamilyName()无法使用。

有一个不错的替代方法吗?注册表中的任何内容,也许吗?

最佳答案

使用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

10-05 20:36