我的第一个想法是使用GetPackageFamilyName()
并查找ERROR_SUCCESS
和APPMODEL_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
。