确定C++应用程序是否作为UWP应用程序运行,具有旧版支持

Wil*_*iam 1 c++ winapi uwp desktop-bridge

我首先想到的是使用GetPackageFamilyName()和查找ERROR_SUCCESSVS APPMODEL_ERROR_NO_PACKAGE.

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

有没有一个像样的替代方法?也许在注册表中的任何东西?

Rem*_*eau 5

用于在运行时动态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
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

可替换地,可以考虑使用的一个GetCurentPackage...()功能(GetCurrentPackageFamilyName(),GetCurrentPackageId(),GetCurrentPackageInfo()等),而不是使用GetPackageFamilyName()HANDLE到调用过程.